我有一个Java程序,该程序从输入文件中以字符串形式读取日期并更新Oracle表,该日期是索引字段的一部分。
我尝试了以下选项:
a)从由c分隔的csv文件中读取数据;作为字符串
109920541;2013-01-17 11:48:09;EDWARD ANTHONY;
b)使用SimpleDateFormat在例程中将字符串转换为日期:
java.text.SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date dt = formatter.parse("2013-01-17 11:48:09");
c)使用此日期来准备我的sql stmt:
String update_query = "UPDATE "+ tableName +" SET NAME = ? WHERE ID = ? AND DATE_TIME = ?";
java.sql.Connection conn = java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPwd);
java.sql.PreparedStatement pstmt = conn.prepareStatement(update_query);
if (dt not null) {
pstmt.setObject(1, new java.sql.Timestamp(dt.getTime()),java.sql.Types.DATE);
}
pstmt.executeBatch();
d)找不到键的日期,因此不会更新数据。
在sql developer中,我使用以下查询来获取行:
SELECT * FROM table
WHERE ID = '1099205410'
AND DATE_TIME = TO_DATE('2013-01-17 11:48:09', 'YYYY-MM-DD HH24:MI:SS');
如何将Java字符串转换为Oracle日期?
谢谢。
答案 0 :(得分:1)
对于一行:
pstmt.setString(1, name);
pstmt.setInt(2 id);
pstmt.setTimeStamp(3, ew java.sql.Timestamp(dt.getTime()));
pstmt.executeUpdate();
如果DATE_TIME值并不总是出现在CSV数据中,则只需使用第二个PreparedStatement即可;只有两个参数。
如果您正在使用循环读取行,请执行
for ... {
...
pstmt.clearParameters();
pstmt.setString(1, name);
pstmt.setInt(2 id);
pstmt.setTimeStamp(3, new java.sql.Timestamp(dt.getTime()));
pstmt.addBatch();
}
pstmt.executeBatch();
您可以考虑使用新的时间API。
(更新用于现有的记录。)