Hello everyone,
Is there a known bug that makes the postgres JDBC driver treat long
variables as int variables, in the context of prepared statements?
I am getting the following error:
org.postgresql.util.PSQLException: Bad value for type int : 2759496100
while executing a prepared statement with the following Java code:
StringBuilder sb = new StringBuilder();
sb.append("SELECT * FROM table ");
sb.append("WHERE timestamp BETWEEN ? AND ? ");
sb.append("AND id IN ( ");
for (int i = 0; i < ids.size() - 1; i++) {
sb.append("?, ");
}
sb.append("? );");
final String query = sb.toString();
try (Connection c = db.getConnection()) {
PreparedStatement p = c.prepareStatement(query);
p.setDate(1, new java.sql.Date(startDate.getTime()));
p.setDate(2, new java.sql.Date(endDate.getTime()));
for (int i = 0; i < ids.size(); i++) {
int arg = 3 + i;
long id = ids.get(i);
p.setLong(arg, id);
}
ResultSet r = p.executeQuery();
This code is being executed by tomcat7 on Ubuntu 14.04, and I am using
the current version of the driver, 9.4-1201. The query executes well on
pgAdmin in all cases, and in tomcat7 only when all the long ids are in
the int range.
Help will be greatly appreciated!
Regards,
Gabriel