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

时间:2016-06-02 06:39:03

标签: java jdbc prepared-statement callable-statement

我想动态地将值传递给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);

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

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