繁体   English   中英

使用Java将日期和时间的csv文件加载到oracle数据库中

[英]Load a csv file of date and time into oracle database using java

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.sql.SQLException:ORA-01843:无效月份

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,我该如何解决该问题并将其插入到timestamp数据类型中。 我创建了一个名为date_tab(workdate timestamp)的表

CSV文件包含以下内容= 15-02-15 17:54:45

18-02-15 18:19:33

20-06-15 18:38:56

15-23-09-15 19:00:18

15-02-02 19:21:08

15-07-07 19:40:04

2015年5月21日20:03:07

25-01-15 20:25:59

28-02-15 20:48:12

27-04-15 00:05:11

我现在无法自行尝试,但是我想您的格式字符串'dd / mon / yyyy hh24:mi:ss'与您的日期字符串'15 -02-15 17:54:45'不匹配。

尝试改用“ dd-mon-yyyy hh24:mi:ss”。

替换( 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 查看此概述以了解更多。

ps :按照示例,您应该使用rr代替yyyy-代替/

更新以下代码,它将成功运行String insertQuery =“插入date_tab(workdate)values(to_date(?,'dd / mm / yy hh24:mi:ss'))”“;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM