今天遇到这样一个问题:用hibernate进行精确匹配查询的时候,一直出错。把查询参数去掉一个字符,即能顺利通过。刚开始还以为是hibernate在进行sql转换的的时候对匹配字段的参数进行校验,因为实体配置文件中该字段长度声明为10,而查询参数的长度刚好为11。但修改过配置文件以后问题依然存在,看了hibernate并没有去做这些参数的校验,那么问题会不会出现在jdbc上呢?想到这里便顺手些了下测试代码,发现问题确实是出现在JDBC上的。
PreparedStatement prsm = co.prepareStatement("select * from user where name= ?");
prsm.setString(1, name);
prsm.executeQuery();
数据库中name对应的字段长度定义为10,而参数中name的长度为11,这样执行查询的时候就会报类型不对匹配的问题,但是如果这些写
PreparedStatement prsm = co.prepareStatement("select * from user where name= '"+name+"'");
//prsm.setString(1, name);
prsm.executeQuery();
就能顺利通过。下面的亦能通过
PreparedStatement prsm = co.prepareStatement("select * from user where name like ?");
prsm.setString(1, name);
prsm.executeQuery();
(以上只对DB2数据库做了测试,其他的没有测试)
总结:在进行精确匹配查询的时候,一定要注意参数的长度,最好不要超过数据库对该字段的设定长度,如果底层方法包装的是PreparedStatement ,并且用setString进行参数填充的话,那么系统将抛出异样!但是如果是拼装sql,然后在执行,就不存在这样的问题。
分享到:
相关推荐
JAVA JDBC数据库连接字符串 jdbc连接字符串 内有多各数据库的示例! Oracle mysql sqlserver...
JDBC连接字符串.doc 对应9种DB
非常全的JDBC连接数据库字符串大全, 包含了所有的主流数据库的字符串
jdbc各种驱动程序+连接字符串.rar
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID String user="test"; String password="test"; Connection conn...
JDBC连接字符串的写法.JDBC连接字符串的写法.
Java中的JDBC常用的连接字符串
包含有SQL2000JDBC SQL2005JDBC ORACLEJDBC MYSQLJDBC 的jar包及连接示例
各种数据库的JDBC驱动下载及连接字符串URL写法,希望能帮助大家
说明了如何JDBC连接Oracle数据库需要使用的字符串及连接方法
JDBC连接字符串大全 racle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID String ...
jdbc-odbc jtds 连接字符串
各种数据库的JDBC驱动下载及连接字符串URL
jdbc驱动字符串url合集.txtjdbc驱动字符串url合集.txt
jdbc-odbc桥数据库连接工作原理,JDBC-ODBC所用的配置及jdbc和odbc连接字符串 示例代码
JDBC连接数据库各种数据库参数大全 1、Oracle8/8i/9i数据库(thin模式) 2、DB2数据库 3、Sql Server7.0/2000数据库 4、Sybase数据库 5、Informix数据库 6、MySQL数据库 7、PostgreSQL...
JDBC常用连接串JDBC常用连接串
JDBC所有数据库连接字符串 找了好久啊,你一定用的着 包括:mysql;sql-server;db2;oracle;...... 等等主流数据库
JDBC 数据库常用连接 链接字符串,经常用各种数据库的朋友可以参考下。
常用JDBC驱动与连接字符串整理.docx