2016-04-29 9 views
0

Bitte helfen Sie mir, ein Problem zu beheben. Ich muss den NAMEN eines Benutzers drucken, aber bekomme nur den ersten Buchstaben davon.JDBC CallableStatement Ausgabe

public static void main(String[] args) {    
    Connection conn = null; 
    java.sql.CallableStatement stmt = null;  

     try { 
      Class.forName(JDBC_DRIVER); 
      conn = DriverManager.getConnection(DB_URL,USER,PASS);  

      String sql = "{call retrieveFirstName(?,?)}"; 
      stmt = conn.prepareCall(sql); 

      //Bind IN parameter first, then bind OUT parameter 
      int uID = 1; 
      ((java.sql.CallableStatement)stmt).setInt(1,uID); 
      ((java.sql.CallableStatement)stmt).registerOutParameter(2, java.sql.Types.VARCHAR); 

      ((java.sql.CallableStatement)stmt).execute(); 

       //Retrieve employee name with getXXX method 
      String userName = ((java.sql.CallableStatement)stmt).getNString(2); 
      System.out.println("User Name with ID:" + uID + " is " + userName);   

     } catch (ClassNotFoundException | SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     finally { 
      //close resources 
     } 
} 

ist hier ein Verfahren

create procedure retrieveFirstName 
@userID int, 
@firstName varchar(250) output 
as 
begin 
select @firstName=first_name 
from user_account 
where [email protected] 
end 
+0

Ihr Java-Code scheint in Ordnung zu sein. Ich denke, das Problem ist mit Ihrer gespeicherten Prozedur. Können Sie die Ausgabe der Prozedur mit dem Sql-Client bestätigen? –

Antwort

0

Sie die Out-Parameter angeben, wie

((java.sql.CallableStatement)stmt).registerOutParameter(2, java.sql.Types.VARCHAR); 

ohne die Genauigkeit des VARCHAR angeben.

Versuchen Sie, die Genauigkeit als drittes Argument für registerOutParameter anzugeben.