java - 如何使用 JDBC 在 Oracle 中插入很长的时间(以毫秒为单位)

标签 java jdbc prepared-statement

我有一个 long 类型,它存储自纪元以来的毫秒数,我想使用 jdbc 准备好的语句将其插入到 oracle Date 中。我尝试了以下方法 -

String query =  "insert into tempp values(? , ?)";
ps = conn.prepareStatement(query);

String longString1 = "1521142078000";
String longString2 = "1521566664738";

long longType1 = new Long(longString1).longValue();
long longType2 = new Long(longString2).longValue();

java.util.Date d1 = new java.util.Date(longType1);
java.util.Date d2 = new java.util.Date(longType2);

ps.setDate(1, new java.sql.Date(longType1));
ps.setDate(2, new java.sql.Date(longType2));

问题在于,在 Oracle 中,它的保存没有时间部分,只有日期 -

Date1                      Date2
--------------------------------------
15-MAR-18 00:00:00       20-MAR-18 00:00:00     

有没有一种方法可以保留 Oracle 中的时间。如果我使用以下内容,我可以看到时间部分被保留。但这是当前时间戳,我想要与自纪元以来的长毫秒表示的时间相对应的日期/时间。

String query =  "insert into tempp values(sysdate , sysdate)";

最佳答案

我想你想要 Oracle 中的日期,而不是时间戳? 我更像是一个 Oracle 人,而不是 Java 人,但它就是这样,就像其他评论员所说的那样,java.sql.Timestamp 将为您提供时间部分

import java.sql.*;


public class Class1 {

    public static void main(String[] args) throws SQLException {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  

        Connection conn = null;
        try {
            conn = DriverManager.getConnection(  
                    "jdbc:oracle:thin:@//localhost/xe","scott","tiger");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  

        String query =  "insert into tempp values(? , ?)";
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(query);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String longString1 = "1521142078000";
        String longString2 = "1521566664738";

        long longType1 = Long.parseLong(longString1);
        long longType2 = Long.parseLong(longString2);

        Timestamp d1 = new Timestamp(longType1);
        Timestamp d2 = new Timestamp(longType2);

        ps.setTimestamp(1, d1);
        ps.setTimestamp(2, d2);

        ps.execute();
    }

}

这是表格

create table tempp (a date, b date);

这是结果

select to_char(a,'mm/dd/yyyy hh24:mi:ss'), to_char(b,'mm/dd/yyyy hh24:mi:ss') from tempp;

2018年3月15日15:27:58 2018年3月20日13:24:24

关于java - 如何使用 JDBC 在 Oracle 中插入很长的时间(以毫秒为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393326/

相关文章:

java - 需要准备好的语句 sql 字符串建议吗?

java - SQL异常 : Invalid parameter index 1 only with PreparedStatement

java - 在Android Studio中使用两个ViewModel从Fragments获取不同类型的数据

java - 用于完整 Web 应用程序的通用 executorservice(固定线程池)还是为每个请求使用 executorService 的新线程池?

java - Flutter 如何生成 Java 而不是 Kotlin

java - 如何正确创建maven插件?

java - 结果集异常 - 在结果集开始之前

apache-spark - Spark createTableColumnTypes 未生成用户提供的架构

mysql - mysql中所有准备好的语句(所有连接)的计数

java - 如何从 JDBC 方法返回多行?