我正在使用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: 列'name'不能为空
所以我的问题是: PreparedStatement 或者它的 setString() 方法是否会将空字符串转换为 null 值?我查阅了Javadoc并没有找到有关此行为的信息。