如何正确地将当前时间戳设置到这个将值插入MySql表的Java CRUD方法中?
我将下表放入MySql数据库:如何正确地将当前时间戳设置到这个将值插入MySql表的Java CRUD方法中?,java,mysql,sql,timestamp,Java,Mysql,Sql,Timestamp,我将下表放入MySql数据库: CREATE TABLE log( timestamp TIMESTAMP NOT NULL, action ENUM('addPerson', 'getPerson', 'getPeople', 'updatePerson', 'deletePerson', 'deleteAll') NOT NULL, PRIMARY KEY (timestamp) ); 现在我正在实现一个JAVAinsertCRUD方法到DAO中,但是我发现在相关的
CREATE TABLE log(
timestamp TIMESTAMP NOT NULL,
action ENUM('addPerson', 'getPerson', 'getPeople', 'updatePerson', 'deletePerson', 'deleteAll') NOT NULL,
PRIMARY KEY (timestamp)
);
现在我正在实现一个JAVAinsertCRUD方法到DAO中,但是我发现在相关的准备状态中设置timestamp值(用当前日期时间初始化)时出现了一些问题
所以我在做这样的事情:
public void addEntry(String message) throws SQLException {
// The Connection object is a singleton and the used connection is the same for all the CRUD methods:
Connection conn = Database.getInstance().getConnection();
PreparedStatement p = conn.prepareStatement("insert into log (timestamp, action) values (?,?)");
p.setTimestamp(1, new Timestamp(time));
}
但是在创建Timestamp对象时会出现错误,因为它需要long值。所以我认为这不是我想要的
如何将其设置为当前时间戳(当前日期时间)
Tnx试试这个:
p.setTimestamp(1,新的时间戳(System.currentTimeMillis())代码>
注意:我建议您在发布SO之前检查Javadoc。这真的很有帮助。java.time
现代方法使用java.time类,这些类在几年前取代了可怕的java.sql.Timestamp
类。具体来说,JDBC4.2及更高版本支持这一点
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;
写入数据库
myPreparedStatement.setObject( … , odt ) ;
找回
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
默认当前时间戳
更好的是,自动化。在表的定义上使用DEFAULT
,在插入行时自动捕获当前时刻。有关标准SQL和MySQL语法的详细信息,请参阅。尝试以下操作:p.setTimestamp(1,新时间戳(System.currentTimeMillis())
如果你用它作为答案,我会接受它的重复:可怕的java.sql.Timestamp
类现在是遗留的,被现代的java.time类java.time.OffsetDateTime
所取代。