如何使用 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));