下面的调用存储过程,执行的时候程序停留了,怎么让我输入啊?哪儿错了?import java.sql.*;public class Testpro1 {    public static void main(String[] args) {
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:myora1", "scott", "tiger");
            CallableStatement c = conn.prepareCall("{call my_sp1(?,?)}");
            c.setString(1, "SCOTT");
            c.setInt(2, 3000);
            c.execute();
            c.close();            
            conn.close();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
}
在pl/sql developer 里面执行my_sp1('SCOTT',3000);是正常的。

解决方案 »

  1.   

    代码没有看出有什么问题,你调试下,ORACLE连接代码通过了?参考下 盖哥的BLOG:
    http://www.eygle.com/digest/2008/05/java_oracle_procedure.html
      

  2.   

    连上了,没报错,执行的时候停留了,可以在Console里面输入东西,不知道怎么回事?
      

  3.   

    在网上搜了一下,现在问题解决了,是要在存储过程了显示地提交commit一下,请问为什么要commit一下?
    存储过程里面的dml语句都要手动commit吗?求解
    create or replace procedure my_sp1(v_ename varchar2,v_sal number) is
    begin
      update pme set sal=v_sal where ename=v_ename;
      commit;--这里起初没commit
    end;
      

  4.   

    其实这个主要是数据库里面的设置问题吧,你可以设置成自动提交,那样就不会出现要写commit语句了。当然,程序员还是要手动提交的好。
      

  5.   


    你的java应用程序没有使用事务进行手动控制,所以你必须在你的数据库里使用显示提交。