2017-06-21 3004 views
-1

我在使用Java進行開發並將記錄插入DB2數據庫時遇到此問題。DB2 SQL錯誤:SQLCODE = -117,SQLSTATE = 42802,SQLERRMC = null,DRIVER = 3.68.61

sqlInsert = "INSERT into SI_Orders (SellersNo,OrderDate,ShipDatePlanned," 
      + "Warehouse,OrderType,ShipToName,ShipToAddress1," 
      + "ShipToCity,ShipToProvState,ShipToPostalZip,ShipToCountry" + ") " 
      + "VALUES (?, ?, ?,'01','DO','bob','a','toronto','ON','h0h0h0','CA')"; 

    try { 
     con = dc.getConnection(); 
     con.setAutoCommit(false); 
     db2Stmt = con.prepareStatement(sqlInsert); 

     for (Order order : orderWrapper.orders) { 
      save1 = con.setSavepoint(); 
      db2Stmt.setString(1, order.getOrderId()); 
      db2Stmt.setTimestamp(2, shipStnDateFormat(order.getOrderDate()));    
      db2Stmt.setString(3, null); // PONo 
      /* 
      * db2Stmt.setTimestamp(4, shipStnDateFormat(order.getShipByDate())); 
      */ 
      db2Stmt.executeUpdate();  
      //con.commit(); 
     } // end of enhanced for each block 
    } // end of try block 

    catch (SQLException e1) { 
     e1.printStackTrace(); 
     if (con != null) { 
      try { 
       System.err.print("Transaction is being rolled back."); 
       con.rollback(); 
      } 

      catch (SQLException se) { 
       se.printStackTrace(); 
      } 
     } // end of if(con != null) block 
    } // end of catch block 
    finally { 
     // Clean-up code 
     con.setAutoCommit(true); 

     if (db2Stmt != null) { 
      db2Stmt.close(); 
     } 

     if (con !=null){ 
      con.close(); 
     } 
    } // end of finally block 
} // end of insertDB method 

private Timestamp shipStnDateFormat(String shipByDate) { 
    SimpleDateFormat shipStnDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
    SimpleDateFormat standardDateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    String parsedFinalFormattedDate = null; 
    Date finalDate = null; 

    if (shipByDate == null) 
     return new java.sql.Timestamp(0); // return a dummy value 

    else { 
     try { 
      Date parsedShipByDate = shipStnDateFormat.parse(shipByDate); // 
      parsedFinalFormattedDate = standardDateFormat.format(parsedShipByDate); // 
      finalDate = standardDateFormat.parse(parsedFinalFormattedDate); // 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     return new java.sql.Timestamp(finalDate.getTime()); 
    } // end of else statement 
} // end of shipStnDateFormat method` 

我得到這個錯誤... DB2 SQL錯誤:SQLCODE = -117,SQLSTATE = 42802,則sqlerrmc = NULL,DRIVER = 3.6in8.61

很顯然,我就喜歡插入所有三列而不拋出SQL異常。

另外,這裏是我用來創建表的DDL,它顯示每列的數據類型以及是否強制執行NOT NULL約束。

第一列「OrderId」是標識列,所以我沒有爲此發出插入參數。

CREATE TABLE SI_Orders (
OrderId INTEGER NOT NULL generated always as identity (start with 0, 
increment by 1, no cache), 
SellersNo VARCHAR(20) NOT NULL, 
OrderDate Timestamp(0) NOT NULL, 
PONo VARCHAR(20), 
ShipDatePlanned Timestamp(0) NOT NULL, 
CONSTRAINT PK_SI_Orders PRIMARY KEY (OrderId) 
); 
+0

你查找什麼 「SQLCODE = -117,SQLSTATE = 42802」 是什麼意思? – bradimus

回答

1

要設置:

db2Stmt.setString(3, null); // PONo 

當你的模型狀態該列:

ShipDatePlanned Timestamp(0) NOT NULL, 

所以將它設置爲NULL是不允許的,更新參數3到非NULL值應該解決這個問題。

+0

謝謝!我輸入了一個字符串值「NULL」而不是null。我仍然得到一個SQLException ... DB2 SQL錯誤:SQLCODE = -180,SQLSTATE = 22007,SQLERRMC = null,DRIVER = 3.68.61。這意味着「日期時間值的字符串表示形式的語法不正確。」它似乎期待ShipDatePlanned列的輸入。如果是這樣,爲什麼它會跳過將第三列(PONo)設置爲「NULL」? – user2255429

+0

哦,在我的答案中錯過了那個部分:該列需要是時間戳而不是字符串。 –

+0

好酷...所以我將該字符串設置爲時間戳,並且它可以工作。我有另一個問題...在我的創建表DDL(顯示在我的問題),它列出OrderId(身份列),SellersNo,OrderDate和PONo。從SellersNo開始,索引號爲1,我希望PONo的索引號爲3.所以當我這樣做時......'db2Stmt.setString(3,「2017-06-01」);''''它會嘗試將此時間戳放在PoNo列中,爲什麼它將它放在ShipDatePlanned列中,我希望索引號是4? – user2255429

0

要將列添加到查詢你可以這樣做:

sqlInsert = "INSERT into SI_Orders (SellersNo,OrderDate,ShipDatePlanned,PONo," 
     + "Warehouse,OrderType,ShipToName,ShipToAddress1," 
     + "ShipToCity,ShipToProvState,ShipToPostalZip,ShipToCountry" + ") " 
     + "VALUES (?, ?, ?,?,'01','DO','bob','a','toronto','ON','h0h0h0',?)"; 

因此,在隨機位置在字符串中添加一列,並增加了?在VALUES中會添加該列。

該指數?從1開始,僅匹配參數替換的列名稱。

例如:在本示例ShipToCountry將指數5

+0

我明白了,現在很清楚!謝謝! :) – user2255429

+0

我已經添加了一些列到這個查詢,現在我收到以下錯誤... 'com.ibm.db2.jcc.am.SqlDataException:DB2 SQL錯誤:SQLCODE = -302,SQLSTATE = 22001, SQLERRMC = null,DRIVER = 3.68.61' – user2255429

+0

我將爲這個新錯誤發佈一個單獨的問題。 – user2255429

相關問題