Mysql PreparedStatement是否将空字符串转换为null?

Mysql PreparedStatement是否将空字符串转换为null?,mysql,jdbc,prepared-statement,string,Mysql,Jdbc,Prepared Statement,String,我在一个用户表上使用MySQL及其最后一个可用的JDBC驱动程序,该表的所有字段都有notnull约束,这些字段是id、name、password和email 在我的Java EE应用程序中,我首先以这种方式调用了一个简单的语句: statement = connection.createStatement(); statement.executeUpdate( "INSERT INTO User (name, password, email) " + "VALUES ('"

我在一个
用户
表上使用MySQL及其最后一个可用的JDBC驱动程序,该表的所有字段都有
notnull
约束,这些字段是
id
name
password
email

在我的Java EE应用程序中,我首先以这种方式调用了一个简单的
语句

statement = connection.createStatement();
statement.executeUpdate( "INSERT INTO User (name, password, email) "
         + "VALUES ('" + paramName + "', '" + paramPassword + "', '" + paramEmail + "');" );
其中
paramName
paramPassword
paramEmail
是字符串。我向这个请求传递了空字符串,并且成功地在表中插入了一个带有空值的新行,因为MySQL认为空字符串不同于空条目

然后,我使用了一个
PreparedStatement

preparedStatement = connection.prepareStatement( "INSERT INTO User (name, password, email) VALUES(?, ?, ?);" );
preparedStatement.setString( 1, paramName );
preparedStatement.setString( 2, paramPassword );
preparedStatement.setString( 3, paramEmail );
preparedStatement.executeUpdate();
但这一次,当我向请求传递空字符串时,我得到了以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“name”不能为null


我的问题是:
PreparedStatement
,或者它的
setString()
方法是否将空字符串转换为空值?我查了一下,在javadoc中没有找到任何关于这种行为的信息。

java.sql.preparedStatement的文档在方法setString中没有提到任何关于这一点的信息。我查看了MySQL ConnectorJ的源代码,也没有发现任何东西。你确定你的字符串不是空的吗?

答案是
。请确保参数的值不为null。也许您的变量
paramName
NULL

好吧,我理解我的错误,字符串确实是NULL。我天真地认为它们不是因为经典的
语句
在表中插入了空值,但这只是因为我直接通过串联构建了请求。我在系统中也看到了这种行为。