我有一个这样创建的表:
CREATE TABLE [dbo].[LogInfo](
[date_current] [datetime] NULL,
[classname] [varchar](500) NULL,
[output] [varchar](500) NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[LogInfo] ADD DEFAULT (getdate()) FOR [date_current]
GO
因此“date_current”列默认为当前日期和时间。
我有这样一个准备好的声明:
PreparedStatement psInsert_ = conn.prepareStatement("INSERT INTO LogInfo VALUES(?,?,?)");
psInsert_.setTimestamp(1, ????????);
psInsert_.setString(2, "test text1");
psInsert_.setString(3, "test text2");
对于如何指定准备好的语句的第一个参数,我有点不知所措,而且在任何地方都找不到类似的例子。
如果我尝试省略默认参数:
PreparedStatement psInsert_ = conn.prepareStatement("INSERT INTO LogInfo ('classname','output') VALUES(?,?)");
psInsert_.setString(1, "test text1");
psInsert_.setString(2, "test text2");
我收到一条错误消息,指出“classname”和“output”是无效的列名。
我应该怎么做?谢谢。
最佳答案
查询中的问题是您使用单引号 ' '
用于字符串文字而不是对象名称,您想要使用方括号 [ ]
或什么都不用根本。由于您定义了默认值,因此您可以跳过插入语句中的该列:
"INSERT INTO LogInfo ([classname],[output]) VALUES(?,?)"
or
"INSERT INTO LogInfo (classname,output) VALUES(?,?)"
只有当您的列名由于某种原因无效时才真正需要使用定界标识符(它可能是保留关键字,或以无效字符开头,或包含空格等)。您的专栏不需要任何内容,因此您应该/可以跳过它们。
参见 MSDN:Database Identifiers有关 SQL Server 命名规则的更多信息。
关于java - PreparedStatement - 如何指定使用列的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31749285/