我正在使用 MySQL 和他们最后一个可用的 JDBC 驱动程序,在一个对所有字段User
都有约束的表上,这些字段是、和.NOT NULL
id
name
password
email
在我的 Java EE 应用程序中,我首先以这种方式调用了一个简单的Statement
方法:
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:列“名称”不能为空
所以这是我的问题:PreparedStatement
或者它的setString()
方法是否将空字符串转换为空值?我查了一下,并没有在 javadoc 中找到有关此行为的任何信息。