问题描述
在程序中,我已经和数据库连接上了但是在执行CallableStatementcs=con.prepareCall("{callp3()}");st.execute();
的时候在那个execute()中出不来一直在运行,但是把存储过程名字写错误了他会有相关的异常提示,最后我就改成执行普通的sql语句Statementst=con.createStatement();st.executeUpdate("updateempsetsal=129whereename='KING'");
还是一样的在那个executeUpdate()函数里面出不来,但是把sal改成ssal就会有异常提示说不存在ssal字段,为什么会这样呢以前没用过Oracle现在开始学习
解决方案
解决方案二:
没人遇到过吗是不是和JDK有关啊
解决方案三:
把你的完整代码贴出来
解决方案四:
packagecom.test;importjava.sql.*;publicclassPlSqlTest{/***@paramargs*/publicstaticvoidmain(String[]args){Connectioncon=null;try{//TODOAuto-generatedmethodstubClass.forName("oracle.jdbc.driver.OracleDriver");con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORACLE","scott","sa");//CallableStatementcs=con.prepareCall("{callp3()}");//cs.setString(1,"KING");//cs.setInt(2,100);Statementst=con.createStatement();st.executeUpdate("updateempsetsal=129whereename='KING'");}catch(SQLExceptione){//TODO:handleexceptione.printStackTrace();try{System.out.println("exception");con.rollback();}catch(SQLExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}}catch(ClassNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}
解决方案五:
我安装的是Oracle10gJDK1.6
解决方案六:
驱动用的是ojdbc6.jar
解决方案七:
CallableStatementcs=con.prepareCall("{callp3()}");cs.execute();
解决方案八:
楼主你好,我只是个新手,没用调用过Oracle的存储过程,你的代码CallableStatementcs=con.prepareCall("{callp3()}");cs.execute();
有问题,我的笔记上是这样写的CallableStatementcs=con.prepareCall("{callp(?,?,?,?)}");
存储过程的格式应该是这样写的吧。恩,我不太了解存储过程,帮不了你...
解决方案九:
这段代码没有问题引用3楼ailanyuqian的回复:
Javacodepackagecom.test;importjava.sql.*;publicclassPlSqlTest{/***@paramargs*/publicstaticvoidmain(String[]args){Connectioncon=null;……
解决方案十:
三种执行SQL语句的对象StatementPreparedStatementCallableStatementConnectionconn=DriverManager.getConnection(url,user,pwd);CallableStatementcs=conn.prepareCall("{callpro(?,?)}");//当有参数时执行存储过程cs.setString(1,"xx");cs.setString(2,"xx");cs.execute();PreparedStatementpstmt=conn.prepareStatement("updateempsetsname=?wheresid=?");//使用预编译的SQL语句对象pstmt.setString(1,"xx");pstmt.setString(2,"xx");pstmt.executeQuery();Statementstmt=conn.createStatement();stmt.executeUpdate("updateempsetsname='aliba'wheresid=1");//有executeUpdate时执行SQL语句
解决方案十一:
修改时用pstmt.executeUpdate();//上面写错了查询时用executeQuery();存储过程用execute();
解决方案十二:
可能是别人没commit。
解决方案十三:
学习了····
解决方案十四:
你oracle的存储过程有没有问题另外我也没有见过调用存储过程不注册的({callpro(?,?)})这里边的问号不可少另外如果你想要有内容从数据库返回那么就必须要注册那个问号比如第二个问号你想要有数据从数据库输出就得先注册他的类型
解决方案十五:
你用int接下你执行之后的返回值看看是-1还是别的什么
解决方案:
引用7楼xiaoair的回复:
楼主你好,我只是个新手,没用调用过Oracle的存储过程,你的代码JavacodeCallableStatementcs=con.prepareCall("{callp3()}");cs.execute();有问题,我的笔记上是这样写的JavacodeCallableStatementcs=con.prepareCall("{callp(?,?,?,?)}");……
这位大哥,你笔记有错,你那是带有输入或输出或既有输入又有输出参数的情况,如果没有可以直接callp3()
解决方案:
楼住,如果你的存储过程带有输入参数,即你要带条件到存储过程里,你得先注册所带条件的数据类型cs.registParameter(1,类型),可能这个方法名写错了,你去核对下;1:是代表条件的位置,也就是说你的存储过程里第几个?是输入条件比如:callp(?,?,?,?)},如果红色问号是输入条件,则是cs.registParameter(2,类型)不知道表达清楚没有?你可以去网上查些资料阿,关于存储过程的inoutinout参数