2015-05-04 17 views
2
import java.io.FileReader; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 

import au.com.bytecode.opencsv.CSVReader; 

public class ImportingDate { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try{ 
     /* Create Connection objects */ 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xe","SYSTEM","sandp"); 
     /* Create the insert statement */ 
     String insertQuery = "Insert into date_tab(workdate) values(to_date(?,'dd/mon/yyyy hh24:mi:ss'))"; 
     PreparedStatement pstmt = conn.prepareStatement(insertQuery); 
     CSVReader reader = new CSVReader(new FileReader("D:\\datedata.csv"), ','); 
     String[] nextLine; 
     int i = 0; 
     while((nextLine = reader.readNext()) != null) 
     { 
      i++; 
      if (nextLine.length == 1){ 
       pstmt.setString(1,nextLine[0]); 
       i=pstmt.executeUpdate(); 
      } 
     } 
     System.out.println("Data Successfully Uploaded"); 
      pstmt.close(); 
      conn.commit(); 
      conn.close(); 
     } 

     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

} 

我感到如下=使用Java

java.sql.SQLException中得到一個錯誤加載日期和時間的csv文件到oracle數據庫不是一個有效的一個月

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) 
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) 
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743) 
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216) 
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955) 
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169) 
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285) 
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368) 
at a.ba.ImportingDate.main(ImportingDate.java:32) 

即時通訊使用eclipse和oracle 10g 我該如何解決這個問題,並將時間戳數據類型插入到表中。 我已創建的表名爲date_tab(workdate時間戳)

CSV文件包含如下= 15-02-15 17時54分45秒

18-02-15 18點十九分33秒

20-06-15 18點38分56秒

23-09-15十九點00分18秒

22-02-15 19時21分08秒

26-07-15 19: 40:04

21-05-15 20時03分07秒

25-01-15 20時25分59秒

28-02-15 20時48分十二秒

27-04- 15 00:05:11

+1

「to_date」語句中的格式與CSV文件中的日期格式不同。 – VGR

回答

1

替換(dd/mon/yyyy

String insertQuery = 
    "Insert into date_tab(workdate) values(to_date(?,'dd/mon/yyyy hh24:mi:ss'))"; 

由(dd-mm-rr

String insertQuery = 
    "Insert into date_tab(workdate) values(to_date(?,'dd-mm-rr hh24:mi:ss'))"; 

mon表示的三個字母縮寫和mm0112。檢查this overview瞭解更多信息。

p.s.:按照例子,你應該使用rr代替yyyy-代替/

2

我現在不能嘗試這個,但是我想你的格式字符串'dd/mon/yyyy hh24:mi:ss'與你的Date-Strings '15不匹配-02-15 17:54:45'。

嘗試使用'dd-mon-yyyy hh24:mi:ss'代替。

+0

'yyyy'由於兩位數年份'15'不會工作 - 使用'rr'而不是 – Trinimon

+0

@VGR你是對的..忽略了兩位數的年份! –

0

更新下面的代碼,它將成功運行 字符串insertQuery =「INSERT INTO date_tab(workdate)VALUES(TO_DATE('DD/mm/yy hh24:mi:ss'))「;