我有存储过程,根据任何给定的输入搜索人员(任何生物数据,例如血型,姓名,身份号码等,接受近26个输入)。
我正在使用Callable Statement
preparecall
方法从java执行存储过程(sql server)。以前我遇到的问题是,只要字符串输入在其众多输入参数之一中传递,我的存储过程就不会给出任何结果(0行结果)。另一方面,当传递任何整数类型参数值但是我将jdbc
驱动程序从jdbc:odbc
驱动程序更改为sqlserver
驱动程序时,给出了正确的结果
(driver name=com.microsoft.sqlserver.jdbc.SQLServerDrive
),问题解决了。
现在我的新问题是,当我的程序procSearch2
(正在运行16个输入)正在运行时,它会使Connection
jdbc
个procSearch1
变量int
变量完全正常),但是其他具有27个输入(string
)的过程即使传递了 CallableStatement stmt=connect.prepareCall("{CALL procSearch1(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
stmt.setInt(1,0);
stmt.setString(2,"");
stmt.setString(3,"");
.
.
.
stmt.setInt(27,0);
ResultSet result=stmt.executeQuery();
if(result!=null)
{
System.out.println(result.getRow());
while(result.next)
{
System.out.println(result.getString("Name"));
}
}
或{{1}}输入值也没有给出任何结果。
它没有给出任何错误它只返回0行结果,它应返回3行结果。
这是代码
{{1}}
答案 0 :(得分:0)
您需要将一个输出参数设置为CallableStatement以读取sp的返回值。 像这样的东西(简洁省略了异常处理):
CallableStatement stmt = connection.prepareCall("{? = call procSearch1(?,?,?) }");
stmt.registerOutParameter(1, java.sql.Types.INTEGER);
stmt.setString(2, "abc");
stmt.setString(3, "xyz");
stmt.execute();
Integer sp_return_value = stmt.getInt(1);
编辑: 根据您的注释,如果您的SP返回Select的结果,即resultSet,我认为您需要使用statement.execute()而不是executeQuery()。
见http://msdn.microsoft.com/en-us/library/ms378630.aspx& http://msdn.microsoft.com/en-us/library/ms378487.aspx
所以,你的代码应该是这样的:
CallableStatement stmt=connect.prepareCall("{CALL procSearch1(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
stmt.setInt(1,0);
stmt.setString(2,"");
stmt.setString(3,"");
.
.
.
stmt.setInt(27,0);
ResultSet result = stmt.execute();
if(result!=null) {
System.out.println(result.getRow());
while(result.next) {
System.out.println(result.getString("Name"));
}
}