为什么我们在spring jdbctemplate中用双引号而不是单引号给出一个字符串参数?

时间:2013-04-26 16:45:28

标签: java jdbctemplate

例如,我的陈述如下:

dbConnection.update("insert into transaction (isrecovered) values(?)", new Object[]{"N"});

在上述陈述中,为什么我们不能将“N”作为“N”?

3 个答案:

答案 0 :(得分:2)

在Java中,字符串用双引号括起来。

Java char用单引号括起来。

StringObject(它是一个子类),数组必须包含对象。 char是基元而不是Object

请勿将上述(仅涉及Java语法)与数据表中的任何列混淆。您可能具有CHAR或VARCHAR类型的列。这是数据库指定存储内容的方式。

此外,不要将上述内容与包含SQL语句的Java String的内容混淆。 SQL是一种与Java不同的语言,它使用不同的约定。不同的DataBase引擎使用单引号或双引号来包围SQL中的字符串常量。另外,它取决于所选的选项。除非您的特定数据库及其设置意味着您不使用单引号,否则典型的常识建议会使用单引号。

答案 1 :(得分:1)

此语句中混合了 2种语言 SQL和Java ),每种语言都有不同的语法。

有些语言接受带有单引号的String(如PHP和SQL),有些则不接受(如Java)。

我建议您使用更安全的解决方案,例如PreparedStatement,您可以调用.setChar(...)

答案 2 :(得分:0)

您的update方法接受String参数,并且字符串在Java中用双引号括起来,而不是单引号。 对于新的Object [] {“N”}事物,这里“N”也是一个String对象,你仍然可以将'N'传递给一个对象数组,因为它们会被自动装入字符对象。