【问题标题】:insert date in oracle from java using PreparedStatement使用 PreparedStatement 从 java 在 oracle 中插入日期
【发布时间】:2013-08-02 12:05:27
【问题描述】:

我正在使用 PreparedStatement 从 Java 向 Oracle 中插入数据。

以下是我的查询:

String query ="insert into table_name(ID, Date) values(?,(select to_char(TO_TIMESTAMP_TZ(REPLACE('Wed May 29 09:26:59 IST 2013','IST','Asia/Calcutta'),'Dy Mon DD hh24:mi:ss TZR YYYY'),'Dy Mon DD hh24:mi:ss YYYY') from dual))";
pstmt = con.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
pstmt.setString(1, ID);
pstmt.setString(2, "Fri Aug 02 12:38:35 IST 2013");
pstmt.executeUpdate();

但我得到了例外:

java.sql.SQLException: ORA-01858: a non-numeric character was found where a numeric was expected

所以任何建议都将不胜感激。

更新1

我尝试设置时间戳

pstmt.setTimestamp(1,Timestamp.valueOf("Fri Aug 02 12:38:35 IST 2013"));

但后来我遇到了异常:

java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

【问题讨论】:

  • 使用java.sql.TimestampPreparedStatement.setTimestamp()
  • @a_horse_with_no_name 感谢您的建议,请参阅update1
  • 看看SimpleDateFormat

标签: java oracle date prepared-statement


【解决方案1】:

我的建议是用 Java 解析你的日期字符串并使用

String query ="insert into table_name(ID, Date) values(?,?)";
...
pstmt.setDate(2, date);

【讨论】:

    【解决方案2】:

    确保数据库中字段的数据类型为Datetime,它将在数据库中存储您的时间戳。

    【讨论】:

    • “日期”不同,使用“日期时间”存储时间戳
    • 我用的是Oracle10,没有叫Datetime的数据类型,Date可以同时存储日期和时间
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多