Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java将日期和时间戳插入数据库的最佳方法_Java_Database - Fatal编程技术网

使用java将日期和时间戳插入数据库的最佳方法

使用java将日期和时间戳插入数据库的最佳方法,java,database,Java,Database,在完成编码之前,我想知道使用java在数据库中插入日期和时间戳的最佳方法是什么 数据库可以是oracle、mssql、db2或mysql 我想以某种方式插入日期和时间戳,以便检索时能够轻松地核对记录。假设我们的数据库管理员可能希望在2015年8月到2015年10月之间以及某些时间范围内提取记录 选项1:为每种数据库类型使用不同的sql查询脚本 示例: INSERT INTO YOUR_TABLE (YOUR_DATE_COLUMN, COLUMN_2, COLUMN_3) VALUES (SY

在完成编码之前,我想知道使用java在数据库中插入日期和时间戳的最佳方法是什么

数据库可以是oracle、mssql、db2或mysql

我想以某种方式插入日期和时间戳,以便检索时能够轻松地核对记录。假设我们的数据库管理员可能希望在2015年8月到2015年10月之间以及某些时间范围内提取记录

选项1:为每种数据库类型使用不同的sql查询脚本

示例:

INSERT INTO YOUR_TABLE (YOUR_DATE_COLUMN, COLUMN_2, COLUMN_3) 
VALUES (SYSDATE, 1234, 567);
java.util.Date date = new java.util.Date();
long t = date.getTime();
java.sql.Date sqlDate = new java.sql.Date(t);
java.sql.Time sqlTime = new java.sql.Time(t);
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(t);

pstmt.setDate(2, sqlDate);
pstmt.setTime(3, sqlTime);
pstmt.setTimestamp(4, sqlTimestamp);
pstmt.executeUpdate();
选项2:使用java语法,如下所示

示例:

INSERT INTO YOUR_TABLE (YOUR_DATE_COLUMN, COLUMN_2, COLUMN_3) 
VALUES (SYSDATE, 1234, 567);
java.util.Date date = new java.util.Date();
long t = date.getTime();
java.sql.Date sqlDate = new java.sql.Date(t);
java.sql.Time sqlTime = new java.sql.Time(t);
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(t);

pstmt.setDate(2, sqlDate);
pstmt.setTime(3, sqlTime);
pstmt.setTimestamp(4, sqlTimestamp);
pstmt.executeUpdate();
选项2能否在不同的数据库类型中正确插入日期和时间戳

选项2能否在不同的数据库类型中正确插入日期和时间戳

假设您使用了与基础列类型匹配的正确Java类型,是的,这就是想法

请注意,在您给出的示例中,设置了列2、3、4,但没有设置列1。显然,您也需要设置第1列,并且它们应该与SQL字符串中的列(您没有包括)匹配,使用?相应列的值的占位符


在任何情况下,请检查您要使用的数据库的jdbc驱动程序文档,查看有关Java类型到SQL类型的映射的实现说明,以及任何潜在的文档化陷阱。

选项2肯定会正确处理插入操作。至少优于选项1:-)当然,您应该在数据库中创建具有适当数据类型的列

你应该注意的是:

  • 数据库中的数据类型
  • 根据1)对数据进行截断
  • 时区(将使用JVM的默认时区),因此如果需要转换,您必须注意这一点。例如@see

  • 我认为,如果希望在单个字段/列中使用日期/时间值,那么
    java.sql.Timestamp
    将是首选方法,因为其他两种方法将根据各自的需要截断日期基。当然,这假设数据库支持SQL时间戳type@MadProgrammer单列或单独列,我想插入的日期和时间是db不可知的。如果我没记错的话,oracle和db2支持日期类型,但不确定时间戳。那个么我是单独插入日期和时间还是在一列中插入呢?选项2——这只是我从网站上复制的一个例子。是的,我注意到了。请原谅我的麻烦。我是使用单独的列来表示日期和时间,还是使用单个列,因为不同的数据库支持不同的日期和时间。例如,oracle date columnn还支持时间如果希望数据单位为日期+时间,则应使用时间戳,并让驱动程序将其映射到正确的类。如果您的数据单位是日期+时间,那么将日期和时间分隔到不同的列会很麻烦,而且不自然。如果这不是您的单位,并且您需要独立的值,那么请务必将它们分开。我对日期和时间使用单独的列还是使用单独的列,因为不同的数据库对日期和时间的支持不同。比如说,oracle date columnn还支持时间,至少对于oracle和mysql,您可以使用单个列。