在程序中,我已经和数据库连接上了 
但是在执行 CallableStatement cs=con.prepareCall("{call p3()}");
         st.execute();的时候在那个execute()中出不来 一直在运行,
但是把存储过程名字写错误了 他会有相关的异常提示,
最后我就改成执行普通的sql语句     Statement st=con.createStatement();
    st.executeUpdate("update emp set sal=129 where ename='KING'");还是一样的 在那个executeUpdate()函数里面出不来,但是把sal改成ssal就会有异常提示说不存在ssal字段,
为什么会这样呢 以前没用过Oracle 现在开始学习 

解决方案 »

  1.   

    没人遇到过吗 是不是和JDK有关啊
      

  2.   


    package com.test;
    import java.sql.*;
    public class PlSqlTest { /**
     * @param args
     */
    public static void main(String[] args) {
    Connection con=null;
    try {

    // TODO Auto-generated method stub
    Class.forName("oracle.jdbc.driver.OracleDriver");
        con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORACLE", "scott","sa");
    // CallableStatement cs=con.prepareCall("{call p3()}");
    //cs.setString(1,"KING");
    //cs.setInt(2,100);
        Statement st=con.createStatement();
        st.executeUpdate("update emp set sal=129 where ename='KING'");
      } catch (SQLException e) {
    // TODO: handle exception
    e.printStackTrace(); try {
    System.out.println("exception");
    con.rollback();
    } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }


      
    }}
      

  3.   

    我安装的是Oracle 10g  JDK 1.6
      

  4.   


     CallableStatement cs=con.prepareCall("{call p3()}");
      cs.execute();
      

  5.   

    楼主你好,我只是个新手,没用调用过Oracle的存储过程,你的代码
    CallableStatement cs=con.prepareCall("{call p3()}");
    cs.execute();有问题,我的笔记上是这样写的CallableStatement cs=con.prepareCall("{call p(?,?,?,?)}");
    存储过程的格式应该是这样写的吧。
    恩,我不太了解存储过程,帮不了你...
      

  6.   

    三种执行SQL语句的对象 
    Statement 
    PreparedStatement 
    CallableStatement 
    Connection conn = DriverManager.getConnection(url, user, pwd);

    CallableStatement cs = conn.prepareCall("{call pro(?,?)}");//当有参数时执行存储过程
    cs.setString(1, "xx");
    cs.setString(2, "xx");
    cs.execute();

    PreparedStatement pstmt = conn.prepareStatement("update emp set sname=? where sid=?");//使用预编译的 SQL 语句对象
    pstmt.setString(1, "xx");
    pstmt.setString(2, "xx");
    pstmt.executeQuery();

    Statement stmt = conn.createStatement();
    stmt.executeUpdate("update emp set sname='aliba' where sid=1"); //有executeUpdate时执行 SQL 语句
      

  7.   

    修改时   用 pstmt.executeUpdate(); //上面写错了
    查询时   用executeQuery();
    存储过程 用execute();
      

  8.   

    你oracle的存储过程有没有问题  另外我也没有见过调用存储过程不注册的({call pro(?,?)})  这里边的问号不可少   另外如果你想要有内容从数据库返回那么就必须要注册那个问号  比如第二个问号你想要有数据从数据库输出就得先注册他的类型
      

  9.   

    你用int接下你执行之后的返回值 看看是-1还是别的什么
      

  10.   

    这位大哥,你笔记有错,你那是带有输入 或 输出 或 既有输入又有输出参数的情况,如果没有可以直接call p3()
      

  11.   

    楼住,如果你的存储过程带有输入参数,即你要带条件到存储过程里,你得先注册所带条件的数据类型
    cs.registParameter(1,类型),可能这个方法名写错了,你去核对下;1:是代表条件的位置,也就是说你的存储过程里第几个是输入条件
    比如:call p(?,?,?,?)},如果红色问号是输入条件,则是cs.registParameter(2,类型)
    不知道表达清楚没有?你可以去网上查些资料阿,关于存储过程的 in   out  inout参数