2016-11-10 2 views
0

aufrufen ich Zugriff auf eine gespeicherte Prozedur auf einem SQL-Server haben, die einen Parameter hat, und ich kann es auf dem SQL-Client wie folgt leicht auszuführen:eine MSSQL Stored Procedure in Java

exec sp_name "2016/11/01" 

Jetzt will ich tun das gleiche in Java.

PreparedStatement ps = conn.prepareStatement("sp_name ?"); 
ps.setString(1, "2016/11/01"); 
ResultSet rs = ps.executeQuery(); 

In rs ich den Spalten Namen sehen können, aber Null-Zeile zurückgegeben wird. Ich denke, es ist wegen der Parameter der gespeicherten Prozedur. Fehle ich hier etwas?

+0

Was ist der Typ des einen Parameter? Trotzdem würde ich vorschlagen, dass Sie stattdessen [CallableStatement] (https://docs.oracle.com/javase/7/docs/api/java/sql/CallableStatement.html) verwenden. Auch könnte das Problem in der SP selbst sein ... PS: besser verwenden Sie ISO-Formatierung Formatierung für Termine, verwenden Sie Formate "YYYYMMDD" oder "YYYY-MM-DD" in SQL Server-Aufrufe. –

+0

Nun, ich kenne den Typ nicht, weil ich keinen Zugriff auf die Quelle des SP habe. –

+0

Vielleicht versuchen Sie mit einem '(java.sql.) Date' Parameter? –

Antwort

0

Hier ist der Code, der schließlich arbeitete:

String date= "2016/11/01" 
String queryString "exec sp_dmp_pub_status ?"; 
PreparedStatement ps = conn.prepareStatement(queryString);   
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); 
Date parsed = format.parse(date); 
java.sql.Date sqlDate = new java.sql.Date(parsed.getTime()); 
ps.setDate(1, sqlDate);   
ResultSet rs = ps.executeQuery();