Java t、 printf(“输出参数数据:%d%n”,s.getInt(4)); }

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=?;”+

如果您需要坚持使用JTD,那么另一种方法是使用
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;
    }
}