PreparedStatement将空字符串转换为null吗?

时间:2012-07-16 02:57:07

标签: mysql jdbc prepared-statement string

我正在使用MySQL及其最后一个可用的JDBC驱动程序,在User表上对NOT NULLid的所有字段name进行约束, passwordemail

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

statement = connection.createStatement();
statement.executeUpdate( "INSERT INTO User (name, password, email) "
         + "VALUES ('" + paramName + "', '" + paramPassword + "', '" + paramEmail + "');" );

paramNameparamPasswordparamEmail是字符串。我将空字符串传递给此请求,并且在表中成功插入了一个带有空值的新行,因为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中找到有关此行为的任何信息。

2 个答案:

答案 0 :(得分:3)

答案是NO。请确保参数的值不为空。也许您的变量paramNameNULL

答案 1 :(得分:2)

java.sql.PreparedStatatement的文档在方法setString中没有说明这一点。我看一下MySQL ConnectorJ的来源,我也找不到任何东西。你确定你的String不是null吗?