下面是一个查询SQL语句的执行方法,能否请各位达人解释下啊,特别是for(int i=0;i<params.length;i++){
pstm.setObject(i+1,params[i]);
}
搞不懂什么意思为什么要i+1public void doPstm(String sql,Object[] params){
if(sql!=null&&!sql.equals("")){
System.out.println(sql);
getCon();
try {
pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
if(params==null){
params=new Object[0];
}
for(int i=0;i<params.length;i++){
pstm.setObject(i+1,params[i]);
}
pstm.execute();
} catch (SQLException e) {
System.out.println("调用DB类中doPstm方法时出错!");
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    不清楚你这边的业务逻辑..
     个人认为可能是跟在查询数据库取出结果集时有关...if (rs.next()) {count = Integer.parseInt(rs.getString(1));//这里是从1开始的
    }
      

  2.   

    jdbc的规范里规定一些标志是从1开始的,和普通的java程序规范有一点冲突。
    仅仅是概念上的问题,记得不要从0开始而是从一开始
      

  3.   

    楼主你的查询SQL语句的采用的是预处理方法执行,
    for(int i=0;i <params.length;i++){ 
    pstm.setObject(i+1,params[i]); 
    }
    下表变量必须从1开始。
    比如我们平时写的预处理SQL语句,
    select from user where name = ? and age = ?;
    pstm.setString(1,"xiao");
    pstm.setInteger(2,20);
    都是从1开始的。
      

  4.   


    哦,那这个传入的数组params意思是在执行预处理SQL语句里的那个下标? 
    就是pstm.setString(1,"xiao"); 
    pstm.setInteger(2,20); 中的 1和2?? 
    还是params数组是按SQL 的查询条件要传入的参数 
    就是"select from user where name = ? and age = ?" 这个SQL语句里的?号....???? 
      

  5.   

    LZ写的这个方法很好,在每次对数据库插入的时候只要掉用这个方法就ok,代码的重用性
      

  6.   


    请问下这个传入的数组params意思是在执行预处理SQL语句里的那个下标? 
    就是pstm.setString(1,"xiao"); 
    pstm.setInteger(2,20); 中的 1和2?? 
    还是params数组是按SQL 的查询条件要传入的参数 
    就是"select from user where name = ? and age = ?" 这个SQL语句里的?号....???? 
      

  7.   

    params数组是按SQL 的查询条件要传入的参数 !!