我想动态地将值传递给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 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);
请帮我解决这个问题。
答案 0 :(得分:0)
我不明白你的问题。 pstmt.executeUpdate()只返回SQL数据操作语言(DML)语句的行数。