2016-06-02 9 views
0

Ich möchte den Wert an SP-Parameter dynamisch übergeben. ist es möglich mit CallableStatement und PreparedStatement?Wie übergibt man den Wert dynamisch an sp mit Java?

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); 
} 

wenn ich executeUpdate() insteadof executeQuery() Execute_SP.java:43: inkompatible Typen gefunden: int erforderlich: java.sql.ResultSet ResultSet rs = pstmt.executeUpdate();

wenn ich executeQuery() verwenden, über Code, gibt sie den resultset und zeigt den Wert von s aus Backend

I get Liste der Eingangsparameter aus sp ich versucht, der gut arbeitet und versucht, die Werte zu übergeben dynamisch

Liste der Parameter für die sp auf die Parameter

Parameter_name Type 
@ename   nvarchar 
@position  varchar 
@expr   int 

wenn unter Verwendung mit exceuteUpdate(): die feinen

arbeitet

Bitte helfen Sie mir, dieses Problem zu lösen.

+0

Die Methode executeUpdate gibt ein int zurück, kein ResultSet - daher die Ausnahme. –

+0

@ dsp_user- oh k .. eigentlich versuche ich Werte von der Liste an den Eingangsparameter - sp zu übergeben. In sp, ich unten Eingang haben Parameter ** Parametername Typ ename nvarchar Position varchar ausdr int ** aber in Java i verwendet, um die Werte von List von Code unten passieren for (int i = 1; i <= lstint.size(); i ++) { pstmt.setString (i, lstValue.get (i-1)); } jetzt erhalten Fehler als ** com.microsoft.sqlserver.jdbc.SQLServerException: Der Wert ist nicht für die Parameternummer 1 festgelegt. ** auf die Verwendung von pstmt.executeQuery() mit dem obigen Code. – Viswa

+0

Das bedeutet nur, dass lstint.size() 0 zurückgibt, so dass der Code innerhalb der for-Schleife nie ausgeführt wird. Was soll PreparedStatement pstmt = con.prepareStatement ("sp_help sp_emp_det") tun? –

Antwort

0

Ich verstehe Ihre Frage nicht. pstmt.executeUpdate() gibt nur Zeilenanzahl für SQL Data Manipulation Language (DML) -Anweisungen zurück.

+0

wenn wir Parameter-Wert eins nach dem anderen setzen wie ** pstmt.setString (1, ""); pstmt.setString (2, ""); pstmt.setInt (3,0); ** was funktioniert. aber ich versuche, Wert an die Parameter dynamisch an sp zu übergeben. Bitte beachten Sie den Fehler mit executeQuery(), der zu dsp_user kommentiert wurde. Sie können einen anderen Weg vorschlagen .. versuchen Sie es zu überprüfen. – Viswa