2016-02-24 40 views
0

我必須通過傳遞值來從java類執行存儲過程。但是,當我正在嘗試,我得到錯誤從java執行過程時出現JDBC連接錯誤

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
    at com.mysql.jdbc.Util.getInstance(Util.java:381) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) 
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:995) 
    at com.coolminds.action.OperatorBillCorrection.main(OperatorBillCorrection.java:27) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

這是我的代碼。

public class OperatorBillCorrection { 

    public static void main(String args[]) throws SQLException { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con=DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/webill_operator_2016","root","root123"); 
      String opCode="KL04C019" ; 

      for(int i=0;i<=12;i++) { 
       String dt= "2015-"+i+"-1" ; 
       PreparedStatement stmts=con.prepareStatement("call sp_getOperatorCollection(?,?)") ; 
       stmts.setString(1,opCode); 
       stmts.setString(2,dt); 
       stmts.execute(); 

      } 
      for(int i=0;i<=2;i++) { 
       String dt= "2016-"+i+"-1" ; 
       PreparedStatement stmts=con.prepareStatement("call sp_getOperatorCollection(?,?)") ; 
       stmts.setString(1,opCode); 
       stmts.setString(2,dt); 
       stmts.execute(); 
      } 

      System.out.println("Completed") ; 
      con.close(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

這是當我使用的,而不是java.util.date聲明stmt=con.createStatement(); stmt.execute("call sp_getOperatorCollection('KL04C019','2015-09-01')");相反的PreparedStatement

+3

嘗試發佈過程:sp_getOperatorCollection – Abdelhak

+0

您是否嘗試使用任何SQL客戶端的參數調用相同的存儲過程? –

+0

是的。它正在工作,當我使用Statement stmt = con.createStatement(); stmt.execute(「call sp_getOperatorCollection('KL04C019','2015-09-01')」);而不是PreparedStatement –

回答

1

使用java.sql.Date工作。

java.util.Date date = formatter.parse(dateString);

java.sql.Date dt = new java.sql.Date(date.getTime());

相關問題