[英]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
表示三个字母的缩写, mm
为01
到12
。 查看此概述以了解更多。
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.