2016-08-21 42 views
0

我正在使用JDBC oracle数据库在Netbeans IDE中执行一个java项目。并且,我需要将日期和时间插入数据库中,格式为11/16/2013 10:30。 我附上我的代码如下。在DBConnector如何在java中插入日期和时间

插入代码

public void insert(String id, String uid, String vmid, String ttid, String faid, String taid, String fdate, String tdate, String onbooking, String msbooking, String bcreated) 
      throws SQLException { 
     Statement stmt = null; 
     String query = "Insert into DMUSER.CAB2(" 
       + "ID," 
       + "USER_ID," 
       + "VEHICLE_MODEL_ID," 
       + "TRAVEL_TYPE_ID," 
       + "FROM_AREA_ID," 
       + "TO_AREA_ID," 
       + "FROM_DATE," 
       + "TO_DATE," 
       + "ONLINE_BOOKING," 
       + "MOBILE_SITE_BOOKING," 
       + "BOOKING_CREATED" 
       + ") values (" 
       + id + "," 
       + uid + "," 
       + vmid + "," 
       + ttid + "," 
       + faid + "," 
       + taid + "," 
       + fdate + "," 
       + tdate + "," 
       + onbooking + "," 
       + msbooking + "," 
       + bcreated + "" 
       + ")"; 

按钮单击事件

private void btn_insertActionPerformed(java.awt.event.ActionEvent evt) {           

    txt_id.setText("132536"); 
    txt_user_id.setText("16"); 
    txt_vechile_mdl_id.setText("28"); 
    txt_from_area_id.setText("58"); 
    txt_to_area_id.setText("1063"); 
    txt_frm_date.setText("11/16/2013 9:30"); 
    txt_to_date.setText("NULL"); 
    txt_booking_created.setText("11/16/2013 9:30"); 
    txt_travel_type_id.setText("2"); 
    txt_mobile_site_booking.setText("0"); 
    txt_online_booking.setText("1"); 
} 

private void btn_predictionActionPerformed(java.awt.event.ActionEvent evt) {            
     try { 

      String id = txt_id.getText(); 
      String uid = txt_user_id.getText(); 
      String vmid = txt_vechile_mdl_id.getText(); 
      String ttid = txt_travel_type_id.getText(); 
      String faid = txt_from_area_id.getText(); 
      String fdate = txt_frm_date.getText(); 
      String tdate = txt_to_date.getText(); 
      String onbooking = txt_online_booking.getText(); 
      String msbooking = txt_mobile_site_booking.getText(); 
      String bcreated = txt_booking_created.getText(); 
      String taid = txt_to_area_id.getText(); 

      DB_Connector con = new DB_Connector(); 

      try { 
       con.insert(id, uid, vmid, ttid, faid, taid, fdate, tdate, onbooking, msbooking, bcreated); 
      } catch (SQLException ex) { 

Logger.getLogger(CabCancellationUI.class.getName())。日志(Level.SEVERE,空,前) ; } }赶上(例外){} }

这里的问题是,在数据库中的日期列在VARCHAR数据类型,所以我怎么能插入此二○一三年十一月一十六日10:30成请帮我解决这个问题。

编辑:异常发生

QUERY ::插入到 DMUSER.CAB2(ID,USER_ID,VEHICLE_MODEL_ID,TRAVEL_TYPE_ID,FROM_AREA_ID,TO_AREA_ID,FROM_DATE,TO_DATE,ONLINE_BOOKING,MOBILE_SITE_BOOKING,BOOKING_CREATED) 值(132536 ,16,28,2,58,1063,11 /二千零十三分之一十六10:30,NULL,1,0,01) java.sql.SQLSyntaxErrorException:ORA-00917:在 oracle.jdbc缺少逗号

.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91) at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206) 在oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer。 java:455)at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1034)at oracle.jdbc.driver.T4CStatement。 doOall8(T4CStatement.java:183)在 oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:942) 在 oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1222) 在 预言。 jdbc.driver.OracleStatement.executeUpdateInternal(ORAC leStatement.java:1706) 在 oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1674) 在 oracle.jdbc.driver.OracleStatementWrapper.executeUpdate(OracleStatementWrapper.java:275) 在Database.DB_Connector。插入(DB_Connector.java:78)在 UI.CabCancellationUI.btn_predictionActionPerformed(CabCancellationUI.java:365) 在UI.CabCancellationUI.access $ 500(CabCancellationUI.java:28)在 UI.CabCancellationUI $ 6.actionPerformed(CabCancellationUI.java: (javax.swing.AvastractButton)$ Handler.actionPerformed(AbstractButton.java:2348) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel。的java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在java.awt.Component.processMouseEvent(Component.java:6535)在 javax.swing.JComponent.processMouseEvent (JComponent.java:3324)at java.awt.Component.processEvent(Component.java:6300)at java.awt.Container.processEvent(Container.java:2236)at java.awt.Component.dispatchEventImpl(Component .java:4891)at java.awt.Container.dispatchEventImpl(Container.java:2294)at java.awt.Component.dispatchEvent(Component.java:4713)at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java :4888) at java.awt.Lightw 8Dispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280)at java.awt.Window。 dispatchEventImpl(Window.java:2750)在 java.awt.Component.dispatchEvent(Component.java:4713)在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)在 java.awt.EventQueue.access $ 500强(EventQueue.java:97)在 java.awt.EventQueue中的$ 3.run(EventQueue.java:709)在 java.awt.EventQueue中的$ 3.run(EventQueue.java:703)在 java.security.AccessController.doPrivileged (Native Method) java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java :76) 在 java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 在java.awt.EventQueue中$ 4.run(EventQueue.java:731)在 java.awt.EventQueue中$ 4.run( EventQueue.java:729)维持在 java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 在java.awt.EventQueue.dispatchEvent java.security.AccessController.doPrivileged(本机方法)(EventQueue.java :728)在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 JA va.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在java.awt.EventDispatchThread.run(EventDispatchThread.java

+0

运行代码时遇到了什么问题/异常 – guleryuz

+0

我已更新异常问题,请检查 – temp

+3

问题1 - 将所有输入参数化为INSERT语句。如果你不想这样做(你应该),日期/时间文字需要用引号括起来,如'11/16/2013 10:30',如果你仍然想使用文字,你不应该取决于默认的oracle日期格式,这可能会因系统而异,所以应该调用to_date()进行转换。但真正使用参数,所以你不必担心atll的废话。 – OldProgrammer

回答

3

这个问题不是你的想法。例外是抱怨错误的插入数据的sql语法。

您需要更正insert方法中的查询字符串。此外,你已经接受为字符串的每个表列,这似乎是不正确的。考虑表的每一列的正确数据类型,如ID应该是数字,而不是varchar等。

如果每个参数的类型是字符串,那么正确的代码沃尔德有如下之前和之后的查询字符串参数添加'无处不在:

String query = "Insert into DMUSER.CAB2(" 
      + "ID," 
      + "USER_ID," 
      + "VEHICLE_MODEL_ID," 
      + "TRAVEL_TYPE_ID," 
      + "FROM_AREA_ID," 
      + "TO_AREA_ID," 
      + "FROM_DATE," 
      + "TO_DATE," 
      + "ONLINE_BOOKING," 
      + "MOBILE_SITE_BOOKING," 
      + "BOOKING_CREATED" 
      + ") values (" 
      + "'"+ id + "'," 
      + "'" + uid + "'," 
      + "'" + vmid + "'," 
      + "'" + ttid + "'," 
      + "'" + faid + "'," 
      + "'" + taid + "'," 
      + "'" + fdate + "'," 
      + "'" + tdate + "'," 
      + "'" + onbooking + "'," 
      + "'"+ msbooking + "'," 
      + "'"+bcreated + "'" 
      + ")"; 

最后,这是一个可怕的代码。你应该考虑使用PreparedStatement。

+0

是的,我误解了exception.working罚款now.Thank you – temp

+0

@temp - 但是,看看我给的建议。尝试PreparedStatements,使用ID的Integer数据类型,日期类型的日期等。另外,继续探索更多相同的内容。祝你好运,:) –

+0

是的,Okey.Thank你再次:) – temp