Oracle数据库PrepareStatement查不到结果

Java中用 PreparedStatement语句查询 Oracle数据库没有结果?而如果直接使用 Statement语句查询却有结果集,怎么回事

第一种:不用占位符,
java.sql.PreparedStatement ps = connection().prepareStatement("select * from test where name='hello'");
java.sql.ResultSet rs = ps.executeQuery();
记录集rs有数据;

第二种:使用占位符,
java.sql.PreparedStatement ps = connection().prepareStatement("select * from test where name=?");
String str="hello";
ps.setString(1,str );
java.sql.ResultSet rs = ps.executeQuery();
记录集rs中无任何数据。


首先需要注意的是:Oracle数据库本身有一个数据类型是NCHAR(50) ,对于输入的字符串参数长度如果达不到数据库定义的长度,使用PrepareStatement 则会出现无效,比如:上面的例子中如果 name 字段的长度设定为  NCHAR(20) 那么如果传入参数值为 "hello" 则无效,需要自动转化成相应的长度才能预编译成功。

可以使用下列函数来解决:将要传入的参数先通过该函数

public static String convert2Nchar(String originString , int length ) {
           StringBuffer stringBuffer = new StringBuffer( originString );
            int size = originString .length();
            if ( size < length ) {
                 for ( int i =1; i <= length - size ; i ++){
                      stringBuffer .append( " " );
                }
                 originString = stringBuffer .toString();
           }
            return originString ;
     }

str= convert2Nchar(str ,20 );
ps.setString(1,str );
java.sql.ResultSet rs = ps.executeQuery();

成功返回记录集rs有数据;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值