Name: mc57594 Date: 02/17/97 The ResultSet.wasNull() function returns true after a getString() or getObject() call on a VARCHAR field that contains an empty string (i.e. ''). A WHERE clause, however, distinguishes between the two. Thus, if you execute this statement: update table set varcharfield='' where primary_key=1 and then execute: select varcharfield from table where primary_key=1 using ResultSet.getString() followed by ResultSet.wasNull() to obtain the field value, the ResultSet.wasNull() will return true. This is not correct, as can be demonstrated by excuting this statement: select varcharfield from table where primary_key=1 and varcharfield is null This statement will (correctly) return no rows. indicating that the varcharfield does not contain a SQL NULL, but rather an empty string. This was obseved with the JDBC-ODBC bridge against an SQL Anywhere 5.0 database. It's important, because there is a class of applications that use what you might term "optimistic locking" for updates: they read a row from the table, allow the user to modify some fields, then do an 'update where field=oldvalue and field=oldvalue and ...' to ensure that the row hasn't been changed by someone else during the interim. This will fail: the 'update where varcharfield is null and ...' won't succeed because the varcharfield isn't really null (this is how we found the problem in the first place). We have a workaround (check for "varcharfield is null or varcharfield='' ") but this is pretty ugly... company - SilverStream Software , email - ###@###.### ======================================================================
|