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 date
, current time
和current timestamp
,这可能比数百个不同的客户端时间更加一致。