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

MySQL数据库中的时间戳数据类型存储日,月,年,小时,分钟,秒,小数秒。使用此功能,您可以一次表示日期和时间。

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

  • 使用数据库默认值作为日期。

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

数据库默认值

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

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程序将值插入具有时间戳的表中时,在Prepared语句中留下时间戳列,或者只是使用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 {
      //获得连接
      String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //将值插入表      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 |
+------+---------------------+

getTime()Calendar类的方法

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

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

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

long time = currentTime.getTime();

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

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