2017-06-21 2945 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

相关问题