Java t、 printf(“输出参数数据:%d%n”,s.getInt(4)); }
如果您需要坚持使用JTD,那么另一种方法是使用Java t、 printf(“输出参数数据:%d%n”,s.getInt(4)); },java,sql-server,stored-procedures,parameters,jtds,Java,Sql Server,Stored Procedures,Parameters,Jtds,如果您需要坚持使用JTD,那么另一种方法是使用PreparedStatement运行一点T-SQL,并使用EXEC语句,该语句只是从参数列表中省略@p_itemshellflist,如下所示: stringsql= “不计数;”+ “声明@upd INT;”+ “EXEC dbo.usp_assignparttoself”+ “@p_ItemNumber=?,”+ “@p_ShelfNumber=?,”+ “@p_updateItems=@upd输出,”+ “@p_DoerTicket=?;”+
PreparedStatement
运行一点T-SQL,并使用EXEC
语句,该语句只是从参数列表中省略@p_itemshellflist
,如下所示:
stringsql=
“不计数;”+
“声明@upd INT;”+
“EXEC dbo.usp_assignparttoself”+
“@p_ItemNumber=?,”+
“@p_ShelfNumber=?,”+
“@p_updateItems=@upd输出,”+
“@p_DoerTicket=?;”+
“选择@upd作为updateItems;”;
try(PreparedStatement s=conn.prepareStatement(sql)){
s、 设置字符串(1,“测试编号”);
s、 设置字符串(2,“testShelfNumber”);
s、 设置字符串(3,“testDoerTicket”);
ResultSet rs=s.executeQuery();//以上T-SQL始终至少返回一个ResultSet
rs.next();
System.out.println(rs.getString(1));//显示ResultSet中的内容
如果(s.getMoreResults()){
System.out.printf(
“信息:%n”+
“找到第二个结果集。%n”+
“存储过程返回了上一个结果集。%n”+
“正在获取下一个结果集…%n”,
"");
rs=s.getResultSet();
rs.next();
System.out.println(rs.getString(1));
}
rs.close();
}
当我从sql执行sp时,我不会向表中声明任何内容,只是p_ItemNumber p_ShelfNumber p_DoerTicket。SQLServerDataTable和addColumnMetadata这是我需要的jar吗?由于无法解析iti,因此executeQuery方法必须返回结果集。关于准备好的声明one@KewinBjörkNielsen-是的,PreparedStatement
实际上并不具备处理输出参数的能力。我已经更新了CallableStatement
示例,以处理可能返回或可能不返回ResultSet
的存储过程。但是我仍然没有SQLServerDataTable和addColumnMetadata,这是我需要的jar吗?@KewinBjörkNielsen-您需要使用最新版本的SQL Server JDBC驱动程序(版本6.0),您可以从中下载。在测试中,我使用了该包中的sqljdbc41.jar
。
cs.setNull(3, Types.NULL);
protected String doInBackground(String... params) {
if (DBcard.trim().equals("") || DBshelf.trim().equals(""))
z = getString(R.string.Invalid_Credentials);
else {
try {
Connection con = connectionClass.CONN();
if (con == null) {
z = getString(R.string.Forbindelses_fejl);
} else {
String itemcard = DBcard;
{
if (itemcard.substring(0, 1).startsWith("K")) {
itemcard = itemcard.substring(1);
} else {
itemcard = itemcard;//.substring(0));
}
}
String itemshelf = DBshelf;
{
if (itemshelf.substring(0, 1).startsWith("R")) {
itemshelf = "" + itemshelf.substring(1);
} else {
itemshelf = "" + itemshelf;//.substring(0));
}
}
String doerTicket;
doerTicket = setingPreferences.getString("doerTicket", "");
String sql = "{call dbo.usp_assignPartToShelf(?,?,?,?,?)}";
try (CallableStatement s = con.prepareCall(sql)) {
s.setString(1, itemshelf);
s.setString(2, itemcard);
SQLServerDataTable dt = new SQLServerDataTable();
dt.addColumnMetadata("ItemNumber", Types.INTEGER);
dt.addColumnMetadata("ShelfNumber", Types.INTEGER);
((SQLServerCallableStatement) s).setStructured(3, "dbo.udtt_ItemShelfPair", dt);
s.registerOutParameter(4, Types.INTEGER);
s.setString(5, doerTicket);
boolean hasResultSet = s.execute();
if (hasResultSet) {
try (ResultSet rs = s.getResultSet()) {
rs.next();
System.out.printf("ResultSet data: %s%n", rs.getString(1));
}
}
System.out.printf("Output parameter data: %d%n", s.getInt(4));
}
}
} catch (Exception ex) {
isSuccess = false;
z = getString(R.string.Exceptions) + "L2)";
Log.e("MYAPP", "exception", ex);
}
}
return z;
}
}