Java 如何使用JDBC在Oracle中插入以毫秒为单位的长时间

Java 如何使用JDBC在Oracle中插入以毫秒为单位的长时间,java,jdbc,prepared-statement,Java,Jdbc,Prepared Statement,我有一个长类型,它存储自epoch以来的毫秒数,我想使用jdbc准备的语句将其插入到oracle日期中。我尝试了以下方法- String query = "insert into tempp values(? , ?)"; ps = conn.prepareStatement(query); String longString1 = "1521142078000"; String longString2 = "1521566664738"; long longType1 = new Lon

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

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     
有没有一种方法可以让我们在甲骨文中保存时间。如果我使用下面的方法,我可以看到时间部分是保留的。但这就是当前的时间戳,我想要的是日期/时间,对应于从epoch开始的长毫秒表示的时间

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

我想你想要的是甲骨文中的日期,而不是时间戳? 我更像是一个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.sql.timestamp
,而不是
java.sql.date
ps.setDate
中使用
java.sql.date
文档截断时间部分。@Joe你的意思是
ps.setTimestamp()
。实际上两者都是
new java.sql.Date(longType1)
是错误的,而且
setDate
-在更改为
java.sql.Timestamp
表sql定义后,使用这两种
setTimestamp
将有助于理解java到sql类型的映射。@Joe,不,我的意思是你的评论说在
setDate
中使用
Timestamp
。我是在纠正你的那部分。