oracle19c方言,JFinal框架操作oracle数据库

JFinal框架操作oracle数据库,需要在configPlugin()方法中配置链接oracle数据库的相关配置

配置JFinal数据库操作插件,configPlugin方法

这里我加载jdbc.properties配置文件实在configConstant加载的

@Override

public void configConstant(Constants me) {

loadPropertyFile("jdbc.properties");//加载配置文件

me.setDevMode(getPropertyToBoolean("config.devModel", false));

me.setViewType(ViewType.JSP);

me.setEncoding("UTF-8");

}

jdbc.properites配置文件

oracle.driver=oracle.jdbc.driver.OracleDriver

oracle.url=jdbc:oracle:thin:@127.0.0.1 :1521:orcl

oracle.username=scott

oracle.password=xiaohu

config.devModel=true

@Override

public void configPlugin(Plugins me) {

ActiveRecordPlugin arp=null;

String driver=getProperty("oracle.driver");

String url=getProperty("oracle.url");

String username=getProperty("oracle.username");

String password=getProperty("oracle.password");

DruidPlugin dp=newDruidPlugin(url, username, password, driver);

me.add(dp);

arp=newActiveRecordPlugin(dp);//设置数据库方言

arp.setDialect(new OracleDialect());

arp.setContainerFactory(new CaseInsensitiveContainerFactory());//忽略大小写

me.add(new EhCachePlugin());

arp.addMapping("users", "id",Users.class);

me.add(arp);

}

需要注意一点的是,由于oracle数据库中在创建表时,会自动的将所有的字段自动转为大写,因此在避免后面操作的时候出现大小写错误的相关异常,这里需要配置忽略大小写的功能

arp.setContainerFactory(new CaseInsensitiveContainerFactory());//忽略大小写

如果不需要对数据库进行增加操作,则必须配置忽略大小写,如果不配置忽略大小写,在保存源代码的该段代码中会出现属性id找不到的异常

/**

* Save model.

*/

public boolean save() {

Config config=getConfig();

Table table=getTable();

StringBuilder sql=newStringBuilder();

Listparas=newArrayList();

config.dialect.forModelSave(table, attrs, sql, paras);

// if (paras.size() == 0)   return false;   // The sql "insert into tableName() values()" works fine, so delete this line

// --------

Connection conn=null;

PreparedStatement pst=null;

int result=0;

try {

conn=config.getConnection();

if (config.dialect.isOracle())

pst=conn.prepareStatement(sql.toString(), new String[]{table.getPrimaryKey()});

else

pst=conn.prepareStatement(sql.toString(), Statement.RETURN_GENERATED_KEYS);

config.dialect.fillStatement(pst, paras);

result=pst.executeUpdate();

getGeneratedKey(pst, table);//如果不配置忽略大小写,执行到这里会出现异常,虽然可以添加到数据库,但是这里报错,界面还是会显示500错误

getModifyFlag().clear();

return result >= 1;

} catch (Exception e) {

throw new ActiveRecordException(e);

} finally {

config.close(pst, conn);

}

getGeneratedKey()源代码部分

/**

* Get id after save method.

*/

private void getGeneratedKey(PreparedStatement pst, Table table) throws SQLException {

String pKey=table.getPrimaryKey();

if (get(pKey) == null || getConfig().dialect.isOracle()) {

ResultSet rs=pst.getGeneratedKeys();

if (rs.next()) {

Class colType=table.getColumnType(pKey);

if (colType== Integer.class ||colType== int.class)

set(pKey, rs.getInt(1));

else if (colType== Long.class ||colType== long.class)

set(pKey, rs.getLong(1));

else

set(pKey, rs.getObject(1));     // It returns Long object for int colType

rs.close();

}

}

}

set()源代码部分

/**

* Set attribute to model.

* @param attr the attribute name of the model

* @param value the value of the attribute

* @return this model

* @throws ActiveRecordException if the attribute is not exists of the model

*/

public M set(String attr, Object value) {

if (getTable().hasColumnLabel(attr)) {//执行到这里返回false

attrs.put(attr, value);

getModifyFlag().add(attr);  // Add modify flag, update() need this flag.

return (M)this;

}

throw new ActiveRecordException("The attribute name is not exists: " + attr);//抛出该异常

}

现在来说说如果不配置,为什么会出现 The attribute name is not exists:这个异常,这是因为oracle中的字段是大写的,而set方法中传入的attr属性的值是小写,而getTable()中的属性对应的就是oracle字段,这些属性则是大写,因此这里使用getTable().hasColumnLabel(attr)判断是否存在该字段,就会找不到,这时就会抛出该异常,因此就必须配置忽略大小写的方法,就不会出现该异常

实体类:

package com.tenghu.core.model;

import com.jfinal.plugin.activerecord.Model;

public class Users extends Model{

public static Users dao=newUsers();

}

操作数据:

Usersusers=newUsers();

users.set("id", "users_sequence.nextval");

users.set("username", "张三");

users.set("pwd", "sdfsdfs");

users.save();

ListtestList=Users.dao.find("select * from users");

这里就完成了JFinal框架操作oracle数据库,删除和修改就自己去测试了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个税社保

资料来源:http://finance.qq.com/cross/20160218/H9cM96A8.html?pgv_refaio2015&ptlang2052转载于:https://www.cnblogs.com/weikang/p/5200832.html

前端程序员如何选择适合自己的培训机构

web前端开发培训哪家好这个主要是根据自己的情况来选择,本篇文章主要分享怎么选择适合自己的培训机构市场上有哪些培训机构以及所在位置既然关心哪家培训机构好,基本都是有报班学习的意向,所以就不多说自学和报班的区别了;我是不排…

linux c文件属性,【linux c learn 之stat】获取文件的属性

NAMEstat 获取文件属性这个函数位于头文件里函数原型:int stat(const char *path, struct stat *buf);參数:path 文件路径文件名称buf 指向buffer的指针返回值:-1 遇到错误0 成功返回函数作用:把path文件的信息拷贝到指…

!function(){}()

http://my.oschina.net/u/2331760/blog/468672?p{{currentPage1}} ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立…

altium designer 10哪个作者写的好 。

问题截图: 博主解答: 其实这种书籍基本内容都差不多,很多都是作者来回借鉴,我们能根据自己的需要学到知识即可。

orm查询部分字段_ORM问题第2部分–查询

orm查询部分字段在我以前关于对象关系映射工具(ORM)的帖子中,我讨论了在处理当今常见的ORM(包括Hibernate)时遇到的各种问题。 其中包括与从POJO生成架构有关的问题,实际性能和不断出现的维护问题。 本质上…

新浪微博开发-添加子视图控制器设置颜色

一.添加子视图控制器 二.设置颜色 设置颜色:两种方法 一种较为繁琐,详见视频 第二种: //设置颜色 self.tabBar.tintColor UIColor.orangeColor()转载于:https://www.cnblogs.com/torrescx/p/5237142.html

linux ssh无需密码,linux下 ssh 实现无需密码的远程登陆

主机A(OpenSUSE12.1):119.78.222.95主机B (Fedora16): 202.122.25.361.主机A:生成秘钥对id_rsa和id_rsa.publinux-9juc:~ # ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Created directory /root/.ssh.…

Android studio的sdk tools下没有LLDB的解决办法

粉丝提问: 博主解答: 解决办法: 点击setting--》plugins--》找到“Android Support”选项,并勾选,然后会提示重启android studio ,点击重启,ok,如果已经设置好SDK的路径的话,问题解…

随机JCache内容:多个提供程序和JMX Bean

JCache(JSR 107)是用于缓存的Java标准…足够了。 没有更多介绍性的东西。 这是一则速成文章,内容涉及 多个JCache提供程序配置,以及 功能:通过JMX Mbeans的JCache统计信息 管理多个JCache提供程序 如果您只使用一个…

HDU 2222 ac自动机模板

题意: 求n个模板串在匹配串中出现了几个. SOL: 反正就是模板啦...似乎比KMP都简单----这么说似乎有点不道德...毕竟先看的KMP而他们并没有什么不同... 貌似自己的理解和他们画的图还是有些出入......不虚慢慢看... 然后就是特殊一点的一个last数组,可以比较迅速地找到包含的子串…

linux下spi添加设备,Linux Kernl添加spidev的设备节点

一、spidev介绍如果在内核中配置spidev,会在/dev目录下产生设备节点,通过此节点可以操作挂载在该SPI总线上的设备。用户空间通过该节点可以访问内核空间。二、配置spidev设备步骤在i.MX6,Kernel 4.1.15上配置spidev的支持。1、配置dts支持spi…

Android studio Jin开发生成so文件的具体步骤

粉丝提问: 博主解答: 帖子链接:https://blog.csdn.net/wangsfine/article/details/51445199

linux中改变文件大小,Linux 改变文件大小的方法

函数原型:#include int ftruncate(int fd, off_t length); //改变文件大小为length指定大小;返回值 执行成功则返回0,失败返回-1。函数ftruncate会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以…

Ubuntu下使用SVN

Ubuntu下使用SVN SVN作为日常开发中不可缺少的工具,今天终于开始在Ubuntu下使用了。 1、首先需要安装SVN。Ubuntu下的SVN安装十分简单,sudo apt-get install subversion,然后根据提示一步一步,就完成了SVN的安装; 2、检…

apktool重新打包,error:No resource identifier found for attribute ‘compileSdkVersionCodename‘ in package

报错日志:AndroidManifes.xml :1 error:No resource identifier found for attribute compileSdkVersionCodename in package ‘android’ 粉丝提问: 报错图: 博主解答:

linux弹性网卡,将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡

本文在介绍将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡的基础上,重点探讨了其具体步骤,本文内容很紧凑,希望大家耐心学习。配置 ECS 实例的弹性网卡如果您的实例使用以下几种镜像,您不需要手工配置弹性网卡(ENI)&#xff1a…

vaadin_嵌入式码头,Vaadin和焊接

vaadin当我开发Web应用程序时,我希望能够从Eclipse快速启动它们,而不必依赖各种重量级的tomcat或glassfish插件。 因此,我经常要做的就是创建一个可以直接从Eclipse直接运行的基于Java的简单Jetty启动器。 该启动器会在几秒钟内启动&#xff…

终端-进入云服务器

解决办法: 1.先进入管理员模式: 2.下一步,链接服务器。 3.已经连接上服务器: 4.找到云服务器的项目路径: 在这里: 我们可以在cd空格/ 按Tab寻找下个文件夹,也可以输入ls查看文件夹。转载于…

Android studio 清除缓存数据的步骤

导读:在eclipse的当中进行运行Android的运用的程序的时候,就会产生内存缓存的信息,而eclipse是可以直接点击停止运行程序,然后点击清除缓存,就可以解决了这个问题,而Android studio却不能直接点击停止运行的,而只能通过其它的方式来清除Android studio中的缓存。 可以看…