Java 如何使用JDBC在Oracle中插入以毫秒为单位的长时间
我有一个长类型,它存储自epoch以来的毫秒数,我想使用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
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
。我是在纠正你的那部分。