在程序中,我已经和数据库连接上了
但是在执行 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 现在开始学习
但是在执行 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 现在开始学习
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();
}
}}
CallableStatement cs=con.prepareCall("{call p3()}");
cs.execute();
CallableStatement cs=con.prepareCall("{call p3()}");
cs.execute();有问题,我的笔记上是这样写的CallableStatement cs=con.prepareCall("{call p(?,?,?,?)}");
存储过程的格式应该是这样写的吧。
恩,我不太了解存储过程,帮不了你...
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 语句
查询时 用executeQuery();
存储过程 用execute();
cs.registParameter(1,类型),可能这个方法名写错了,你去核对下;1:是代表条件的位置,也就是说你的存储过程里第几个?是输入条件
比如:call p(?,?,?,?)},如果红色问号是输入条件,则是cs.registParameter(2,类型)
不知道表达清楚没有?你可以去网上查些资料阿,关于存储过程的 in out inout参数