Java 为什么我们在SpringJDBCTemplate中用双引号而不是单引号给出字符串参数?

Java 为什么我们在SpringJDBCTemplate中用双引号而不是单引号给出字符串参数?,java,jdbctemplate,Java,Jdbctemplate,例如,我的声明如下: dbConnection.update("insert into transaction (isrecovered) values(?)", new Object[]{"N"}); 在上面的语句中,为什么不能将“N”表示为“N”?在Java中,字符串用双引号括起来 Javachar用单引号括起来 字符串是一个对象(它是一个子类),数组必须包含对象。char是原语,而不是对象 不要将上述内容(仅涉及Java语法)与数据表中的任何列混淆。您可能有CHAR或VARCHAR类型的

例如,我的声明如下:

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

在上面的语句中,为什么不能将“N”表示为“N”?

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

Java
char
用单引号括起来

字符串
是一个
对象
(它是一个子类),数组必须包含对象。
char
是原语,而不是
对象

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


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

在Java中,字符串被双引号包围

Java
char
用单引号括起来

字符串
是一个
对象
(它是一个子类),数组必须包含对象。
char
是原语,而不是
对象

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


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

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

有些语言接受带单引号的字符串(如PHP和SQL),有些语言不接受(如Java)


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

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

有些语言接受带单引号的字符串(如PHP和SQL),有些语言不接受(如Java)


我建议您使用一种更安全的解决方案,如
PreparedStatement
,您可以在其中调用
.setChar(…)
您的更新方法接受字符串参数,并且字符串在Java中用双引号括起来,而不是单引号。
对于新对象[]{“N”},这里的“N”也是字符串对象,您仍然可以将“N”传递给对象数组,因为它们将自动装箱到字符对象。

您的更新方法接受字符串参数,并且字符串在Java中用双引号包围,而不是单引号。
对于新对象[]{“N”},这里的“N”也是字符串对象,您仍然可以将“N”传递给对象数组,因为它们将自动装箱为字符对象。

但是我的字段是表中的字符……那么?如果您的Java连接器足够聪明,它可能理解长度为1的字符串可以转换为字符,但是你可能会得到一个异常Buddy,当时的异常是从UnsupportedException到UnsupportedException的无效转换…那是什么?但是我的字段是表中的CHAR…那么?如果你的Java连接器足够聪明,它可能理解长度为1的字符串可以转换为CHAR,但是你可能会得到一个异常Buddy,那次异常是无效的从UnsupportedException到UnsupportedException的转换…那是什么?好的,明白了..因为对象数组不接受原语值..thanx@javadevthis不是真的,
Object[]array=new Object[]{N'}
是合法的,因为原语字符被装箱到字符对象中。@Rodriguez确实错过了!!好的,明白了..因为对象数组不接受基元值..thanx@javadevt这不是真的,
Object[]array=new Object[]{'N'}
是合法的,因为基元字符被装箱到了字符对象中。@Rodriguez,的确,错过了它!!