我在java程序中调用一个简单的存储过程simple2,即
public class Simple {
private static final String sqlSimple = " {call simple2(?,?)}";
Connection con = null;
CallableStatement cstmt=null;
public Connection getDbConnection(){
try{
Class.forName(StudentConst.getDbDriverName());
con = DriverManager.getConnection(StudentConst.getDbConnUrl(),StudentConst.getDbUser(),StudentConst.getDbPassword());
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
return con;
}
public void insertSimple(){
try{
con = getDbConnection();
cstmt = con.prepareCall(sqlSimple);
cstmt.setString(1,"naveen");
cstmt.setInt(2, 22);
int rs = cstmt.executeUpdate();
System.out.println("return val is "+rs);
}catch(SQLException e){
System.out.println("caught"+e);
}
}
public static void main(String[] args) {
Simple s = new Simple();
s.insertSimple();
}
}
这里的返回值rs应为1,但它返回-1为什么?
我的存储过程是
CREATE PROC [dbo].[simple2]
@name varchar(50), @age int
AS
set nocount on
insert into Simple1
(name,age)
values
(@name, @age)
GO
但是在PrepareStaement的情况下,它返回正确的更新计数,即我的查询的1个为什么不对可调用语句?
答案 0 :(得分:2)
我在其他网站上发现了这个:
executeUpdate()将仅为PreparedStatement和Statement返回rowCount。尽管CallableStatement扩展了Statement接口的executeUpdate(),但这不会返回rowCount,即使对该过程的调用在数据库中进行了多次更新/插入也是如此。如果调用过程中有一个OUT参数,则callableStatement上的executeStatement()将返回1,否则返回0.
希望它有所帮助。