没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
解决解决mybatis使用使用char类型字段查询类型字段查询oracle数据库时结果返回数据库时结果返回
null问题问题
主要介绍了mybatis使用char类型字段查询oracle数据库时结果返回null问题的解决方法,本文给大家介绍的非常
详细,具有一定的参考借鉴价值,需要的朋友可以参考下
同事在学mybatis时,遇到了一个问题就是,使用char类型字段作为查询条件时一直都查不出数据,其他类型的则可以。
使用的数据库是oracle,查询条件字段类型是char(50),java代码对应的是String类型。
后来经过排查,是由于在oracle中,char类型字段,如果内容长度不够,会自动以空格方式补足长度。如字段 name
char(5),若值为sgl,那么oracle会自动用空格补足长度,最终值为sgl。
一、解决方法:一、解决方法:
方法1:先用trim()函数把值去掉两边空格再作为条件查询,如:
select * from data where data.name=#{name}
改为:
select * from data where trim(data.name)=#{name}
方法2:将字段类型char()改为varchar2()类型。一般情况下,只有所有值长度都一样时才用char()类型,比如性别字段,用0表
示男和1表示女时,就可以用char(1),如果值的长度不固定,有长有短,最好别用char()类型。
二、深入了解二、深入了解mybatis返回返回null
抛开mybatis框架,回到原始的jdbc查询,当使用oracle的char类型作为条件查询数据时,只有值完全一样时才能查到数据。
如创建一个测试表:
create table t_user(
user_name char(5)
);
insert into t_user (user_name)values('sgl');
select '"'||user_name||'"' from t_user ; -- 查询结果为"sgl ",可以看出oracle自动补了两个空格
通过jdbc的PreparedStatement方式查询数据:
conn=getConnection();
ps=conn.prepareStatement("select * from t_user where user_name=?");
ps.setString(1,"sgl");
ResultSet rs = ps.executeQuery();
通过上面方式是无法查到数据的,因为查询条件值”sgl”和数据库中值”sgl “是不相等的。
如果值用“sgl ”可以查到数据:
conn=getConnection();
ps=conn.prepareStatement("select * from t_user where user_name=?");
ps.setString(1,"sgl "); -- 增加两个空格不足5位长度
ResultSet rs = ps.executeQuery();
如果使用trim()方式也可以查询到数据,如:
conn=getConnection();
ps=conn.prepareStatement("select * from t_user where trim(user_name)=?"); -- 先对数据库中user_name进行去空格,然后再比较
ps.setString(1,"sgl");
ResultSet rs = ps.executeQuery();
现在回到mybatis,同事的Mapper文件里查询sql如下:
<select id="selectByName" resultType="com.entity.Data" parameterType="java.lang.String">
select * from data where data.name=#{name}
</select>
main方法内容为:
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
DataService d = (DataService) ctx.getBean("dataServiceImpl");
资源评论
- 番皂泡2023-07-26这篇文章给出了一个实用的解决方案,帮助我解决了在使用mybatis查询oracle数据库时char类型字段返回null的困扰。
- 两斤香菜2023-07-26这篇文档提供了一个简洁明了的解决方案,让我能够轻松解决在使用mybatis查询char类型字段时结果返回null的问题。
- 易烫YCC2023-07-26这篇文章详细介绍了如何处理在mybatis中使用char类型字段查询oracle数据库时返回null的问题,对我的开发工作非常有帮助。
- 八位数花园2023-07-26这篇文件清晰地解释了在mybatis中查询oracle数据库时char类型字段返回null的原因,并提供了一个简单易行的解决方案,非常实用。
- 巧笑倩兮Evelina2023-07-26这篇文件给出了一个非常有用的解决方案,帮助我解决了在使用mybatis查询oracle数据库时结果返回null的问题。
weixin_38672807
- 粉丝: 9
- 资源: 925
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功