如何使用 JDBC 在数据库中插入当前日期和时间?

jdbcjava 8programmingobject oriented programming

MySQL 数据库中的时间戳数据类型存储日、月、年、时、分、秒和秒的小数部分。使用时间戳可以同时表示日期和时间。

使用 JDBC 时,有两种方法可以插入/获取当前时间戳值。

  • 使用数据库默认值。

  • 使用日历类的 getTime() 方法。

数据库默认值

使用以下查询在 MySQL 数据库中创建一个名为 sample 的表来存储时间戳:

CREATE TABLE Sample(Id INT, Current_Time_Stamp TimeStamp);

现在描述该表,如下所示:

+--------------------+-----------+------+-----+-------------------+
| Field              | Type      | Null | Key | Default           |
+--------------------+-----------+------+-----+-------------------+
| Id                 | int(11)   | YES  |     | NULL              |
| Current_Time_Stamp | timestamp | NO   |     | CURRENT_TIMESTAMP |
+--------------------+-----------+------+-----+-------------------+

如果您观察,会发现时间戳的默认值是系统当前时间戳。也就是说,如果您没有向此列传递任何值,默认情况下它将被当前时间戳值填充。

因此,在使用 JDBC 程序向包含时间戳的表中插入值时,请在预处理语句中保留时间戳列,或者直接使用 CURRENT_TIMESTAMP 代替占位符?这样它将被当前时间戳值填充。

示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class InsertingCurrentTime {
   public static void main(String args[])throws Exception {
      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Inserting values to a table

      String query = "INSERT INTO sample(ID, Current_Time_Stamp)
      VALUES (?, CURRENT_TIMESTAMP)";

      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setInt(1, 1);
      pstmt.execute();
      System.out.println("Data inserted......");
   }
}

输出

Data inserted......

如果您观察表格的内容,您会看到它具有当前时间戳值:

+------+---------------------+
| Id   | Current_Time_Stamp  |
+------+---------------------+
| 1    | 2019-02-27 17:18:17 |
+------+---------------------+

Calendar 类的 getTime() 方法

Calendar 类的 getTime() 方法返回一个 Date 类的对象,该对象保存着日历的当前时间值。

Calendar calendar = Calendar.getInstance();
java.util.Date currentTime = calendar.getTime();

java.util.Date 类还提供了一个名为 getTime() 的方法,该方法返回一个 long 类型的变量,表示从标准纪元时间(自 1970 年 1 月 1 日 00:00:00 GMT 以来)到该对象当前时间值的毫秒数。

long time = currentTime.getTime();

现在,将获得的当前时间值作为一个参数传递给setTimedtamp()方法,另一个参数是一个整数,表示占位符的参数索引?您需要将当前时间戳值设置为该占位符。

pstmt.setTimestamp(2, new Timestamp(time));

相关文章