| Bug #2437 | PreparedStatement.setNull does not set null | ||
|---|---|---|---|
| Submitted: | 18 Jan 2004 14:10 | Modified: | 18 Jan 2004 15:10 |
| Reporter: | [ name withheld ] | Email Updates: | |
| Status: | Not a Bug | Impact on me: | |
| Category: | Connector / J | Severity: | S1 (Critical) |
| Version: | 3.0.10 | OS: | Linux (Linux 2.6.1-gentoo) |
| Assigned to: | Mark Matthews | CPU Architecture: | Any |
[18 Jan 2004 15:10]
Mark Matthews
Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.mysql.com/documentation/ and the instructions on how to report a bug at http://bugs.mysql.com/how-to-report.php Additional info: Please see the following manual section that explains why MySQL will accept a NULL in a NOT NULL column (it silently converts it to the DEFAULT value): http://www.mysql.com/doc/en/constraint_NOT_NULL.html

Description: This code does not throw exception (vendor_employee cannot be null, see table structure): PreparedStatement prepStmt; String sqlcmd; sqlcmd = "update contract " + "set vendor_employee = ? " + "where id = ?"; prepStmt = conn.prepareStatement(sqlcmd); prepStmt.setNull(1, java.sql.Types.BIGINT); prepStmt.setString(2, "1"); prepStmt.executeUpdate(); This does not works too: prepStmt.setString(1, vendorEmployee); update command in mysql returns: mysql> update contract set vendor_employee=null where id=462; -------------- update contract set vendor_employee=null where id=462 -------------- Query OK, 0 rows affected (0.01 sec) Rows matched: 1 Changed: 0 Warnings: 1 Additional informations: ------------------------ table structure: CREATE TABLE `contract` ( `id` bigint(20) unsigned NOT NULL default '0', `vendor_employee` bigint(20) unsigned NOT NULL default '0', PRIMARY KEY (`id`), ) TYPE=InnoDB; java version "1.4.2_03" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02) Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode) MySQL 4.0.16 How to repeat: PreparedStatement prepStmt; String sqlcmd; sqlcmd = "update contract " + "set vendor_employee = ? " + "where id = ?"; prepStmt = conn.prepareStatement(sqlcmd); prepStmt.setNull(1, java.sql.Types.BIGINT); prepStmt.setString(2, "1"); prepStmt.executeUpdate();