帮我看看问题出在哪 谢谢

时间:2022-12-27 23:29:31
import java.sql.*;

public class TestProc {

public static void main(String[] args) {
Connection conn = null;
CallableStatement cstmt = null;

try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.102:1521:orcl","scott","tiger");
cstmt = conn.prepareCall("call p {?,?,?,?};");
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);
cstmt.setInt(4, 5);
cstmt.execute();

System.out.println(cstmt.getInt(3));
System.out.println(cstmt.getInt(4));
}catch (ClassNotFoundException e){
e.printStackTrace();
System.out.println("Class Not Found!");
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(cstmt!= null){
cstmt.close();
cstmt = null;
}
if(conn!= null){
conn.close();
cstmt = null;
}
}catch(SQLException e){
e.printStackTrace();
}
}


}

}



myeclipse 报错     java.sql.SQLException: 出现格式不正确的 SQL92 串: 9. Expecting "=" got ","
 at TestProc.main(TestProc.java:18)

7 个解决方案

#1


cstmt = conn.prepareCall("call p {?,?,?,?};"); 
cstmt.registerOutParameter(3, Types.INTEGER); 
cstmt.registerOutParameter(4, Types.INTEGER); 
cstmt.setInt(1, 3); 
cstmt.setInt(2, 4); 
cstmt.setInt(4, 5); 
cstmt.execute(); 
是不是多了这一句
cstmt.setInt(4, 5); 
楼主可不可以把你的存储过程贴上来

#2


该回复于2009-09-25 10:50:11被版主删除

#3


java.sql.SQLException: 出现格式不正确的 SQL92 串: 9. Expecting "=" got "," 
at TestProc.main(TestProc.java:18)

楼主就按照这个错误提示去改阿,呵呵

#4


即使把cstmt.setInt(4, 5);注释掉仍然报同样的错


引用 1 楼 java1109 的回复:
cstmt = conn.prepareCall("call p {?,?,?,?};");
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);
cstmt.setInt(4, 5);
cstmt.execute();
是不是多了这一句
cstmt.setInt(4, 5);
楼主可不可以把你的存储过程贴上来

#5


cstmt = conn.prepareCall("{ call p (?,?,?,?) }"); 

好像是这么写吧

#6


cstmt = conn.prepareCall("call p {?,?,?,?};"); 
换成
cstmt = conn.prepareCall("{ call p(?,?,?,?) }"); 
试试看

#7


java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: 
PLS-00306: 调用 'P' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored

改了以后出现的问题     还是因为这句话出错  cstmt.execute();   



引用 6 楼 thc1987 的回复:
cstmt = conn.prepareCall("call p {?,?,?,?};");
换成
cstmt = conn.prepareCall("{ call p(?,?,?,?) }");
试试看

#1


cstmt = conn.prepareCall("call p {?,?,?,?};"); 
cstmt.registerOutParameter(3, Types.INTEGER); 
cstmt.registerOutParameter(4, Types.INTEGER); 
cstmt.setInt(1, 3); 
cstmt.setInt(2, 4); 
cstmt.setInt(4, 5); 
cstmt.execute(); 
是不是多了这一句
cstmt.setInt(4, 5); 
楼主可不可以把你的存储过程贴上来

#2


该回复于2009-09-25 10:50:11被版主删除

#3


java.sql.SQLException: 出现格式不正确的 SQL92 串: 9. Expecting "=" got "," 
at TestProc.main(TestProc.java:18)

楼主就按照这个错误提示去改阿,呵呵

#4


即使把cstmt.setInt(4, 5);注释掉仍然报同样的错


引用 1 楼 java1109 的回复:
cstmt = conn.prepareCall("call p {?,?,?,?};");
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);
cstmt.setInt(4, 5);
cstmt.execute();
是不是多了这一句
cstmt.setInt(4, 5);
楼主可不可以把你的存储过程贴上来

#5


cstmt = conn.prepareCall("{ call p (?,?,?,?) }"); 

好像是这么写吧

#6


cstmt = conn.prepareCall("call p {?,?,?,?};"); 
换成
cstmt = conn.prepareCall("{ call p(?,?,?,?) }"); 
试试看

#7


java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: 
PLS-00306: 调用 'P' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored

改了以后出现的问题     还是因为这句话出错  cstmt.execute();   



引用 6 楼 thc1987 的回复:
cstmt = conn.prepareCall("call p {?,?,?,?};");
换成
cstmt = conn.prepareCall("{ call p(?,?,?,?) }");
试试看