//package jdbcsetnulltest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.UUID;
/**
*
* @author imaskar
*/
public class JdbcSetNullTest {
/**
* @param args the command line arguments
* @throws java.lang.ClassNotFoundException
* @throws java.sql.SQLException
*/
Class.forName("org.postgresql.Driver");
final String jdbcString
= ""; //use your own final String sql
= "select 'ok' where null=null or (null is null)"; final String sqlBind
= "select 'ok' where ?=? or (? is null)"; final String sqlBindCorrect
= "select 'ok' where ?=? or (cast (? as uuid) is null)";
final UUID uuid = UUID.randomUUID();
printOut("Fixed", rs);
try {
stp.
setObject(1, uuid,
Types.
INTEGER); stp.
setNull(2,
Types.
INTEGER); stp.
setNull(3,
Types.
INTEGER); rs = stp.executeQuery();
printOut("Prepared INTEGER", rs);
System.
out.
println("Prepared INTEGER returned exception "+sQLException.
getMessage()); }
try {
stp.clearParameters();
stp.
setObject(1, uuid,
Types.
BINARY); stp.
setNull(2,
Types.
BINARY); stp.
setNull(3,
Types.
BINARY); rs = stp.executeQuery();
printOut("Prepared BINARY", rs);
System.
out.
println("Prepared BINARY returned exception "+sQLException.
getMessage()); }
try {
stp.clearParameters();
stp.
setNull(1,
Types.
BINARY); stp.
setNull(2,
Types.
BINARY); stp.
setNull(3,
Types.
BINARY); rs = stp.executeQuery();
printOut("Prepared DOUBLE BINARY", rs);
System.
out.
println("Prepared DOUBLE BINARY returned exception "+sQLException.
getMessage()); }
try {
stp.clearParameters();
stp.
setObject(1, uuid,
Types.
OTHER); stp.
setNull(2,
Types.
OTHER); stp.
setNull(3,
Types.
OTHER); rs = stp.executeQuery();
printOut("Prepared OTHER", rs);
System.
out.
println("Prepared OTHER returned exception "+sQLException.
getMessage()); }
try {
stp.clearParameters();
stp.
setObject(1, uuid.
toString(),
Types.
VARCHAR); stp.
setNull(2,
Types.
VARCHAR); stp.
setNull(3,
Types.
VARCHAR); rs = stp.executeQuery();
printOut("Prepared VARCHAR", rs);
System.
out.
println("Prepared VARCHAR returned exception "+sQLException.
getMessage()); }
}
}
try {
while (rs.next()) {
System.
out.
print(": returned "); System.
out.
println(rs.
getString(1)); }
rs.close();
System.
out.
println("exception "+sQLException.
getMessage()); }
}
}
Ly9wYWNrYWdlIGpkYmNzZXRudWxsdGVzdDsKCmltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOwppbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKaW1wb3J0IGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50OwppbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OwppbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwppbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OwppbXBvcnQgamF2YS5zcWwuVHlwZXM7CmltcG9ydCBqYXZhLnV0aWwuVVVJRDsKCi8qKgogKgogKiBAYXV0aG9yIGltYXNrYXIKICovCnB1YmxpYyBjbGFzcyBKZGJjU2V0TnVsbFRlc3QgewoKICAvKioKICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAqIEB0aHJvd3MgamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb24KICAgKiBAdGhyb3dzIGphdmEuc3FsLlNRTEV4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBTUUxFeGNlcHRpb24gewogICAgQ2xhc3MuZm9yTmFtZSgib3JnLnBvc3RncmVzcWwuRHJpdmVyIik7CiAgICBmaW5hbCBTdHJpbmcgamRiY1N0cmluZyA9ICIiOyAvL3VzZSB5b3VyIG93bgogICAgZmluYWwgU3RyaW5nIHNxbCA9ICJzZWxlY3QgJ29rJyB3aGVyZSBudWxsPW51bGwgb3IgKG51bGwgaXMgbnVsbCkiOwogICAgZmluYWwgU3RyaW5nIHNxbEJpbmQgPSAic2VsZWN0ICdvaycgd2hlcmUgPz0/IG9yICg/IGlzIG51bGwpIjsKICAgIGZpbmFsIFN0cmluZyBzcWxCaW5kQ29ycmVjdCA9ICJzZWxlY3QgJ29rJyB3aGVyZSA/PT8gb3IgKGNhc3QgKD8gYXMgdXVpZCkgaXMgbnVsbCkiOwogICAgZmluYWwgQ29ubmVjdGlvbiBjb25uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGpkYmNTdHJpbmcpOwogICAgCiAgICBmaW5hbCBVVUlEIHV1aWQgPSBVVUlELnJhbmRvbVVVSUQoKTsKICAgIAogICAgdHJ5IChTdGF0ZW1lbnQgc3QgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOyBQcmVwYXJlZFN0YXRlbWVudCBzdHAgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoc3FsQmluZCk7KSB7CiAgICAgIFJlc3VsdFNldCBycyA9IHN0LmV4ZWN1dGVRdWVyeShzcWwpOwogICAgICBwcmludE91dCgiRml4ZWQiLCBycyk7CiAgICAgIAogICAgICB0cnkgewogICAgICAgIHN0cC5zZXRPYmplY3QoMSwgdXVpZCwgVHlwZXMuSU5URUdFUik7CiAgICAgICAgc3RwLnNldE51bGwoMiwgVHlwZXMuSU5URUdFUik7CiAgICAgICAgc3RwLnNldE51bGwoMywgVHlwZXMuSU5URUdFUik7CiAgICAgICAgcnMgPSBzdHAuZXhlY3V0ZVF1ZXJ5KCk7CiAgICAgICAgcHJpbnRPdXQoIlByZXBhcmVkIElOVEVHRVIiLCBycyk7CiAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzUUxFeGNlcHRpb24pIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByZXBhcmVkIElOVEVHRVIgcmV0dXJuZWQgZXhjZXB0aW9uICIrc1FMRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICBzdHAuY2xlYXJQYXJhbWV0ZXJzKCk7CiAgICAgICAgc3RwLnNldE9iamVjdCgxLCB1dWlkLCBUeXBlcy5CSU5BUlkpOwogICAgICAgIHN0cC5zZXROdWxsKDIsIFR5cGVzLkJJTkFSWSk7CiAgICAgICAgc3RwLnNldE51bGwoMywgVHlwZXMuQklOQVJZKTsKICAgICAgICBycyA9IHN0cC5leGVjdXRlUXVlcnkoKTsKICAgICAgICBwcmludE91dCgiUHJlcGFyZWQgQklOQVJZIiwgcnMpOwogICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc1FMRXhjZXB0aW9uKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcmVwYXJlZCBCSU5BUlkgcmV0dXJuZWQgZXhjZXB0aW9uICIrc1FMRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICBzdHAuY2xlYXJQYXJhbWV0ZXJzKCk7CiAgICAgICAgc3RwLnNldE51bGwoMSwgVHlwZXMuQklOQVJZKTsKICAgICAgICBzdHAuc2V0TnVsbCgyLCBUeXBlcy5CSU5BUlkpOwogICAgICAgIHN0cC5zZXROdWxsKDMsIFR5cGVzLkJJTkFSWSk7CiAgICAgICAgcnMgPSBzdHAuZXhlY3V0ZVF1ZXJ5KCk7CiAgICAgICAgcHJpbnRPdXQoIlByZXBhcmVkIERPVUJMRSBCSU5BUlkiLCBycyk7CiAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzUUxFeGNlcHRpb24pIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByZXBhcmVkIERPVUJMRSBCSU5BUlkgcmV0dXJuZWQgZXhjZXB0aW9uICIrc1FMRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICBzdHAuY2xlYXJQYXJhbWV0ZXJzKCk7CiAgICAgICAgc3RwLnNldE9iamVjdCgxLCB1dWlkLCBUeXBlcy5PVEhFUik7CiAgICAgICAgc3RwLnNldE51bGwoMiwgVHlwZXMuT1RIRVIpOwogICAgICAgIHN0cC5zZXROdWxsKDMsIFR5cGVzLk9USEVSKTsKICAgICAgICBycyA9IHN0cC5leGVjdXRlUXVlcnkoKTsKICAgICAgICBwcmludE91dCgiUHJlcGFyZWQgT1RIRVIiLCBycyk7CiAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzUUxFeGNlcHRpb24pIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByZXBhcmVkIE9USEVSIHJldHVybmVkIGV4Y2VwdGlvbiAiK3NRTEV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgc3RwLmNsZWFyUGFyYW1ldGVycygpOwogICAgICAgIHN0cC5zZXRPYmplY3QoMSwgdXVpZC50b1N0cmluZygpLCBUeXBlcy5WQVJDSEFSKTsKICAgICAgICBzdHAuc2V0TnVsbCgyLCBUeXBlcy5WQVJDSEFSKTsKICAgICAgICBzdHAuc2V0TnVsbCgzLCBUeXBlcy5WQVJDSEFSKTsKICAgICAgICBycyA9IHN0cC5leGVjdXRlUXVlcnkoKTsKICAgICAgICBwcmludE91dCgiUHJlcGFyZWQgVkFSQ0hBUiIsIHJzKTsKICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIHNRTEV4Y2VwdGlvbikgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJlcGFyZWQgVkFSQ0hBUiByZXR1cm5lZCBleGNlcHRpb24gIitzUUxFeGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKICAgICAgfQogICAgfQogICAgCiAgfQoKICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50T3V0KGZpbmFsIFN0cmluZyBoZWFkZXIsIGZpbmFsIFJlc3VsdFNldCBycykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICBTeXN0ZW0ub3V0LnByaW50KGhlYWRlcik7CiAgICB0cnkgewogICAgICB3aGlsZSAocnMubmV4dCgpKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludCgiOiByZXR1cm5lZCAiKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKICAgICAgfSAgICAgIAogICAgICBycy5jbG9zZSgpOwogICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIHNRTEV4Y2VwdGlvbikgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhjZXB0aW9uICIrc1FMRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CiAgICB9CiAgfQogIAp9Cg==