2016-11-09 108 views
0

我正在研究JSP应用程序,并且我在这一点上很困难。数据库管理员给了我一个存储过程,他希望我传递与存储过程中的值相对应的列名称。我问他是否可以在准备好的声明中传递索引值,而不是列名,但他说我可以成为一个主要问题,如果我使用索引值。所以,请给我一个建议,以便我可以在准备好的语句中传递列名而不是索引值。在java和sql server中传递存储过程中的列名?

e.g - 目前说我的过程被称为

mystmt = conn.preparestatement("exec p_addeditcustomer ?,?,?"); 
    mystmt.setString(1,"A"); 
    mystmt.setString(2,"B"); 
    mystmt.setString(3,"C"); 

现在,我的数据库管理员希望我通过诸如

mystmt.setString("@CustomerName","A"); 
mystmt.setString("@CustomertTitle","B"); 
mystmt.setString("@CustomerCountry","C"); 

请告诉我,我怎么能做到这一点。我真的无能为力。

回答

2

只需使用一个CallableStatement,这是为了与存储过程中使用:

CallableStatement cstmt = conn.prepareCall("{call p_addeditcustomer(?,?,?)}"); 

    cstmt.setString("CustomerName", "A"); 
    cstmt.setString("CustomertTitle", "B"); 
    cstmt.setString("CustomerCountry", "C"); 
+0

: - 将与CallableStatement的SQL Server存储过程的工作? – Farheen

+0

@Farheen:是的,它也应该与SQL Server一起工作,您可以在这里找到其他示例:https://programmaticponderings.com/2012/08/24/calling-sql-server-stored-procedures-with-java-using- jdbc /。 – Berger

+0

@Farheen反过来。 JDBC是一个标准化的API,数据库供应商提供实现它的驱动程序。所以是的,SQL Server支持CallableStatement。 – Gimby