SQL INSERT系统日期进入表

我创建了一个名为“myTable”的表,其中一列名为CURRENT_DATE,其数据类型为“DATE”。 当我以编程方式更新我的表时,我还想在CURRENT_DATE字段中放置时间戳或系统日期。 我正在做的部分内容如下所示,但它不起作用。 我认为这很容易,但是……你能帮忙吗?

//System date is captured for placement in the CURRENT_DATE field in myTable java.util.Date currentDate = new java.util.Date(); ... stmt.executeQuery("INSERT INTO myTable (NAME, CURRENT_DATE) VALUES (' " + userName + " ', ' " + currentDate + " ') "); 

你真的应该使用参数作为一个准备好的语句来做这件事,它使事情变得更容易,并削减了一些非常简单的SQL注入威胁。

 Connection con = ...; PreparedStatement statement = con.prepareStatement("INSERT INTO myTable (NAME, CURRENT_DATE) VALUES ( ?, ?)"); statement.setString(1, userName); statement.setDate(2, currentDate ); statement.execute(); 

有关如何正确使用预准备语句的大量信息。 例如: http : //www.jdbc-tutorial.com/jdbc-prepared-statements.htm

如果您只想要当前日期,则可以从SQL服务器检索该日期,而无需将其作为变量提交。 它根据您使用的服务器而略有不同,但在MS SQL Server中有一个名为getdate()的函数。

 stmt.executeQuery("INSERT INTO myTable (NAME, CURRENT_DATE) VALUES (' " + userName + " ', getdate()"); 

您还可以将getdate()设置为该字段的默认值,以便您可以完全省略该字段:

 stmt.executeQuery("INSERT INTO myTable (NAME) VALUES (' " + userName + " '" ') "); 

不要在SQL中放置字符串。 使用预准备语句并设置参数。

尝试这个:

 stmt.executeQuery("INSERT INTO myTable (NAME, CURRENT_DATE) VALUES (' " + userName + " ', GETDATE()) "); 

对于数据完整性,这应该在DBMS端完成,具有更新和插入触发器。

恶意(或错误)代码可以使用任何其他方法。

如何获取实际值(以及如何创建适当的触发器)取决于DBMS本身。 DB2提供了可用于将服务器时间插入数据库的current datecurrent timecurrent timestamp ,这可能比数百个不同的客户端时间更加一致。