PreparedStatement 查询时无效的列索引 .

PreparedStatement 查询时无效的列索引
在使用PreparedStatement  仅对oracle数据库进行查询是在   ps.setObject(i, values[i]);总是提示无效的列索引

错误代码代码
public List queryForBeans(final String sql, final Object... values)  {  
        Connection connection = null;  
        try {  
            connection = super.getDataSource().getConnection();  
            PreparedStatement ps = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);  
            if (values != null) {  
                for (int i = 0; i < values.length; i++) {  
                    ps.setObject(i, values[i]);  
                }  
            }  
            ResultSet rs = ps.executeQuery();  
            RowSetDynaClass rsdc = new RowSetDynaClass(rs);  
            rs.close();  
            ps.close();  
            return rsdc.getRows();  
 
        } catch (SQLException ex) {  
            throw this.getExceptionTranslator().translate("", sql, ex);  
        } finally {  
            this.close(connection);  
        }  
    } 

public List queryForBeans(final String sql, final Object... values)  {
  Connection connection = null;
  try {
   connection = super.getDataSource().getConnection();
   PreparedStatement ps = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);
   if (values != null) {
    for (int i = 0; i < values.length; i++) {
     ps.setObject(i, values[i]);
    }
   }
   ResultSet rs = ps.executeQuery();
   RowSetDynaClass rsdc = new RowSetDynaClass(rs);
   rs.close();
   ps.close();
   return rsdc.getRows();

  } catch (SQLException ex) {
   throw this.getExceptionTranslator().translate("", sql, ex);
  } finally {
   this.close(connection);
  }
 } 
后来在网上收了下原来是ps的参数是从1开始的而不是从0开始的,所有总是报无效的列索引,改为    ps.setObject(i+1, values

[i]);这样就ok了。还有在网上也看到有人出现同样的问题,但不是我这样的问题,而是下标的数量与?的数量不一致,或者将?写成

了?

转载于:https://my.oschina.net/u/219582/blog/59496

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值