如何使用java将值动态传递给sp?

Posted

技术标签:

【中文标题】如何使用java将值动态传递给sp?【英文标题】:how to pass the value dynamically to sp using java? 【发布时间】:2016-06-02 06:39:03 【问题描述】:

我想动态地将值传递给 sp 参数。 CallableStatement 和 PreparedStatement 可以吗?

Connection con=null;
Drivername="com.microsoft.sqlserver.jdbc.SQLServerDriver";.
Connectionname="jdbc:sqlserver://localhost:1433;databaseName=test;
Class.forName(Drivername);
con = DriverManager.getConnection(Connectionname,USER_NAME, PWD); 
PreparedStatement pstmt = con.prepareStatement("sp_help sp_emp_det");
ResultSet rs = pstmt.executeQuery();
List<String> lstint= new ArrayList<String>();
pstmt.getMoreResults(); //returns set of resultset in boolean
rs = pstmt.getResultSet();
while(rs.next())

    System.out.println(rs.getString(2)); //checking input parameter list
    lstint.add(rs.getString(2)); // getting list of parameter's datatype from sp and push into Arraylist

pstmt = con.prepareStatement("call sp_emp_det(?,?,?)");
for (int i=1; i<=lstint.size() ; i++ )

pstmt.setString(i,lstValue.get(i-1));

rs = pstmt.executeUpdate(); //throws error on here which mentioned below
//to retrive resultset from the sp
while(rs.next())

String s=rs.getString(1);
System.out.println("s : "+s);

如果我使用 executeUpdate() 而不是 executeQuery() Execute_SP.java:43:不兼容的类型 发现:int 必需:java.sql.ResultSet 结果集 rs = pstmt.executeUpdate();

如果我在上面的代码中使用 executeQuery(),它会返回结果集并从后端显示 s 的值

我正在尝试从 sp 获取输入参数列表,它工作正常,并尝试将值动态传递给参数

sp的参数列表

Parameter_name Type
@ename         nvarchar
@position      varchar
@expr          int

如果在下面与 exceuteUpdate() 一起使用:效果很好

pstmt.setString(1,"");
pstmt.setString(2,"");
pstmt.setInt(3,0);

请帮我解决这个问题。

【问题讨论】:

executeUpdate 方法返回一个 int,而不是一个 ResultSet——因此是异常。 @dsp_user- 哦 k.. 实际上我正在尝试将值从 List 传递给输入参数 - sp。在 sp 中,我有以下输入参数 Parameter_name Type ename nvarchar position varchar expr int 但在 java 中,我曾经通过以下代码从 List 传递值 for (int i=1; icom.microsoft.sqlserver.jdbc.SQLServerException: The value is not set for the parameter number 1. 使用 pstmt.executeQuery() 和上面的代码。 这只是意味着 lsint.size() 返回 0 因此 for 循环内的代码永远不会执行。这个 PreparedStatement pstmt = con.prepareStatement("sp_help sp_emp_det") 应该做什么? oh k.. 还有其他方法可以带吗?该语句将每个参数的数据类型带入 mssql。 看看这里***.com/questions/3543924/…。给出了检索存储过程参数的查询,所以只需使用它。 【参考方案1】:

我不明白你的问题。 pstmt.executeUpdate() 只返回 SQL 数据操作语言 (DML) 语句的行数。

【讨论】:

如果我们像 pstmt.setString(1,"");pstmt.setString(2,"");pstmt.setInt(3,0); 效果很好。但我正在尝试将值动态传递给sp。请查看注释到 dsp_user 的 executeQuery() 错误。你可以建议任何其他方式..会尝试检查它。

以上是关于如何使用java将值动态传递给sp?的主要内容,如果未能解决你的问题,请参考以下文章

Java:如何将值从类/bean传递给servlet

如何将值从java传递给PHP?

如何将值从动态列表视图传递到活动?

如何将值传递给paint方法

如何在 iOS 中使用 WKWebView 将值动态传递到 iFrame

如何将值从另一个文件或命令提示符传递给类