解决oracle数据库中ps.setString()失效的问题
来源:互联网 发布:蜂蜜源码 编辑:程序博客网 时间:2024/06/05 03:16
oracle数据库中的ps.setString()失效的问题
首先,不得不说,这是oracle数据库的一个巨坑。
它是oracle中定义的char类型的字段造成的,在oracle中,char表示定长的字符串,
当字符串长度不够时,数据库会自动用空格补全到指定长度。
然后当你进行数据库语句的操作时,
就会出现这样的现象:当进行不带占位符的语句的操作时,可以操作成功;
eg:select * from t_uer where id='1001';(oracle数据库中id为char(5)类型)
但是,当进行带有占位符的语句的操作时,数据库操作不成功,但又不会报错。
eg:select * from t_user where id=? ;
ps.setString(1,id);
这是因为在oracles数据库中,char类型的特性决定的,当字符不够指定长度时,会用空格进行占位
从而造成错误。
解决:
1.使用select * from t_user where trim(id)=?;的形式进行操作。trim表示去掉前后空格
2.使用select id from a where id=rpad(?,10)的形式。
3.使用ps.setString(1,cast(id,char(7)));
即使使用了这三个正确的SQL,也会带来性能问题。
因为第一个SQL不会利用正常创建的索引,而且在复杂的查询下,更容易出错。
所以应尽量避免使用Oracle的char类型,即使只有一个字节,也应该使用varchar2类型
首先,不得不说,这是oracle数据库的一个巨坑。
它是oracle中定义的char类型的字段造成的,在oracle中,char表示定长的字符串,
当字符串长度不够时,数据库会自动用空格补全到指定长度。
然后当你进行数据库语句的操作时,
就会出现这样的现象:当进行不带占位符的语句的操作时,可以操作成功;
eg:select * from t_uer where id='1001';(oracle数据库中id为char(5)类型)
但是,当进行带有占位符的语句的操作时,数据库操作不成功,但又不会报错。
eg:select * from t_user where id=? ;
ps.setString(1,id);
这是因为在oracles数据库中,char类型的特性决定的,当字符不够指定长度时,会用空格进行占位
从而造成错误。
解决:
1.使用select * from t_user where trim(id)=?;的形式进行操作。trim表示去掉前后空格
2.使用select id from a where id=rpad(?,10)的形式。
3.使用ps.setString(1,cast(id,char(7)));
即使使用了这三个正确的SQL,也会带来性能问题。
因为第一个SQL不会利用正常创建的索引,而且在复杂的查询下,更容易出错。
所以应尽量避免使用Oracle的char类型,即使只有一个字节,也应该使用varchar2类型
0 0
- 解决oracle数据库中ps.setString()失效的问题
- 关于运行PS软件的Oracle数据库迁移注意问题
- 解决oracle自增长sequence失效的问题
- 解决oracle自增长sequence失效的问题
- hibernate小问题:setString的定义
- 如何解决Oracle数据库中汉字长度的问题
- 解决Oracle数据库中汉字长度的问题
- 解决Python中读Oracle数据库的中文编码问题
- PreparedStatement中setString方法的异常
- PreparedStatement中setString方法的异常处理
- java中PreparedStatement类的setString用法
- 解决ubuntu 8.04中virtualbox键盘失效的问题
- 解决linux中sudo su失效的问题
- 关于iOS7中UIView效果失效问题的解决
- 解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
- 解决ViewPager在ScrollView中失效的问题
- 解决springMVC中 shiro 注解授权失效 的问题
- 解决springboot中kotlin语法$失效的问题
- iOS导出4个ipa包的含义
- 机器学习之C4.5
- 查看linux服务器内存使用情况free -m命令详解
- 前端打包利器,webpack工具,app打包工具
- Java中的文件操作
- 解决oracle数据库中ps.setString()失效的问题
- Transform组件助手类
- Java基础-泛型(下)
- 59安装MySQL 60MySQL入门语句10条 61提交留言到MySQL
- ACM学习历程13——multimap集合容器
- ImageLoader所有属性
- STL与拷贝构造函数
- poj-3468A Simple Problem with Integers(线段树对部分数值的改变以及求和)
- 利用关联数组找出重叠的内容