如题
本人是新手,写了一段想调用存储过程的代码,总是出错,请高手给予指点 //
strSQL = "insert into b(bh) values(" + bh + ")";
db.execute(strSQL);
这样写就不会出错
如果如下写:
strSQL = "{call putb(?)}";
db.setString(1,bh);
db.execute(strSQL);
就出错请问正确写法

解决方案 »

  1.   

    后面的db CallableStatement类型吗   
      

  2.   

    String strSQL = "{call putb(?)}"; //如果连接数据库使用的用户,不是putb存储过程所在schema用户的话,需要在putb前面加上schema名
    CallableStatement db = null;
    db = conn.prepareCall(strSQL);
    db.setString(1,bh); 
    db.execute(strSQL); 
      

  3.   

    如果是
    String bh='123123';
    strSQL = "{call putb('"+bh+"')}";
    db.execute(strSQL); 就能成功,就是希望能用
    strSQL = "{call putb(?)}"; 
    这样的格式,
    请指点
    to zhouzongjiu
    不是的,db 就是建立了一个连接,是
    prepstmt = conn.prepareStatement(sql);
      

  4.   

    你把
    prepstmt = conn.prepareStatement(sql);
    改成
    CallableStatement cs= conn.prepareCall(sql); 
    就可以了
      

  5.   

    谢谢,在诸位帮助下解决了,把结果发布,需要者可以参考
    for (int i = 0; i < list.size(); i++) {
    conn.setAutoCommit(false);
    XmlBean xx= (XmlBean) list.get(i);
    String flag = xx.getFlag();
    List Alist = xx.getAList();
    for (int j = 0; j < Alist .size(); j++) {
    XmlBean B= (XmlBean) Alist .get(j);
    String CC= B.getB();
    int xh = B.getXh();
    strSQL = "{call putb(?,?,?)}";
    db=conn.prepareCall(strSQL);
    db.setString(1,flag); 
    db.setString(2,CC); 
    db.setInt(3,xh); 
    db.execute();
                                    db.close();
    }
    strSQL = "{call puta(?)}";
    db=dbpool.prepareCall(strSQL);
    db.setString(1,flag); 
    db.execute(); 
                                    db.close();
    dbpool.commit();
    }