BUG #3751: Conversion error using PreparedStatement.setObject()

From: "Lance Andersen" <lance(dot)andersen(at)sun(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #3751: Conversion error using PreparedStatement.setObject()
Date: 2007-11-15 22:01:33
Message-ID: 200711152201.lAFM1X1M080066@wwwmaster.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


The following bug has been logged online:

Bug reference: 3751
Logged by: Lance Andersen
Email address: lance(dot)andersen(at)sun(dot)com
PostgreSQL version: 8.2.x
Operating system: N/A
Description: Conversion error using PreparedStatement.setObject()
Details:

A PreparedStatement.setObject(1, "1", Types.Bit) will fail with the
following Exception:

org.postgresql.util.PSQLException: ERROR: column "max_val" is of type bit
but expression is of type integer
at
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorI
mpl.java:1548)
at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.ja
va:1316)
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)

at
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.j
ava:452)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2St
atement.java:337)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2State
ment.java:283)
at com.sun.jdbc.samples.BitTest.testSetObject48(BitTest.java:108)
at com.sun.jdbc.samples.BitTest.runTest(BitTest.java:61)
at com.sun.jdbc.samples.BitTest.main(BitTest.java:16)

Here is a simple repro:

package com.sun.jdbc.samples;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.math.BigDecimal;
import java.math.*;
import java.util.StringTokenizer;

public class BitTest {
List<Drivers> drivers;

public static void main(String args[]){
BitTest test = new BitTest();
test.runTest();

}

public BitTest() {
drivers = new ArrayList<Drivers>();



// Postgresql Drivers
drivers.add(new Drivers("org.postgresql.Driver",
"jdbc:postgresql://jsepc18.east:5432/CTS5", "cts1", "cts1" ));



}

public void runTest() {
Connection conn = null;

for(Drivers driver : drivers){
try {
Class.forName(driver.getDriver());
conn = DriverManager.getConnection(driver.getUrl(),
driver.getUser(), driver.getPassword());
DatabaseMetaData dbmeta = conn.getMetaData();
dumpVersionInfo(dbmeta);
testSetObject48(conn);
conn.close();
}catch( Exception e ) {
e.printStackTrace();
}

}



}


public static void dumpVersionInfo(DatabaseMetaData dbmeta) {

try {

System.out.println("\n***********************************************");

String productName = dbmeta.getDatabaseProductName();
String productVersion = dbmeta.getDatabaseProductVersion();
String driverName = dbmeta.getDriverName();
String driverVersion = dbmeta.getDriverVersion();

System.out.println("productName: " + productName);
System.out.println("productVersion: " + productVersion);
System.out.println("driverName: " + driverName);
System.out.println("Version: " + driverVersion);


System.out.println("***********************************************");

} catch( Exception e ) {
e.printStackTrace();
}
}

private static void testSetObject48(Connection conn) {
ResultSet rs;
String Min_Val_Query= "SELECT MIN_VAL from Bit_Tab";
String sMaxBooleanVal = "1";
//sMaxBooleanVal = "true";
Boolean bool = Boolean.valueOf("true");
String Min_Insert= "insert into Bit_Tab values(1,0,null)";
//System.out.println("Value to insert=" +
extractVal(Min_Insert,1));
CallableStatement cstmt;
try {
Statement stmt = conn.createStatement();
stmt.executeUpdate("delete from Bit_Tab");
stmt.executeUpdate(Min_Insert);
cstmt = conn.prepareCall("{call Bit_In_Min(?)}");
cstmt.setObject(1,sMaxBooleanVal,java.sql.Types.BIT);
//cstmt.setObject(1,bool,java.sql.Types.BIT);
cstmt.executeUpdate();

rs = stmt.executeQuery(Min_Val_Query);
while(rs.next()){
System.out.println("Expected value=" + sMaxBooleanVal + ",
Returned value as Boolean= " +rs.getBoolean(1)
+ ", as String=" + rs.getString(1));
}
} catch (SQLException ex) {
ex.printStackTrace();
}


}



}

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Kris Jurka 2007-11-15 22:59:00 Re: BUG #3751: Conversion error using PreparedStatement.setObject()
Previous Message Tom Lane 2007-11-15 21:12:20 Re: Strange problem with an index.