如何使用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我不明白你的问题。 pstmt.executeUpdate() 只返回 SQL 数据操作语言 (DML) 语句的行数。
【讨论】:
如果我们像 pstmt.setString(1,"");pstmt.setString(2,"");pstmt.setInt(3,0); 效果很好。但我正在尝试将值动态传递给sp。请查看注释到 dsp_user 的 executeQuery() 错误。你可以建议任何其他方式..会尝试检查它。以上是关于如何使用java将值动态传递给sp?的主要内容,如果未能解决你的问题,请参考以下文章