Обсуждение: small bug

Поиск
Список
Период
Сортировка

small bug

От
Christian Roux
Дата:
Hi everybody !!!

Driver version : postgresql-8.1-410.jdbc3.jar and
postgresql-jdbc-8.2-506.src.tar.gz
In file org.postgresql.jdbc2.TypeInfoCache :

private static final Object types[][] = {
        {"int2", new Integer(Oid.INT2), new Integer(Types.SMALLINT),
"java.lang.Short"},
        {"int4", new Integer(Oid.INT4), new Integer(Types.INTEGER),
"java.lang.Integer"},
        {"oid", new Integer(Oid.OID), new Integer(Types.INTEGER),
"java.lang.Integer"},
        {"int8", new Integer(Oid.INT8), new Integer(Types.BIGINT),
"java.lang.Long"},
        {"money", new Integer(Oid.MONEY), new Integer(Types.DOUBLE),
"java.lang.Double"},
        {"numeric", new Integer(Oid.NUMERIC), new
Integer(Types.NUMERIC), "java.math.BigDecimal"},
        {"float4", new Integer(Oid.FLOAT4), new Integer(Types.REAL),
"java.lang.Float"},
        {"float8", new Integer(Oid.FLOAT8), new Integer(Types.DOUBLE),
"java.lang.Double"},
        {"bpchar", new Integer(Oid.BPCHAR), new Integer(Types.CHAR),
"java.lang.String"},
        {"varchar", new Integer(Oid.VARCHAR), new
Integer(Types.VARCHAR), "java.lang.String"},
        {"text", new Integer(Oid.TEXT), new Integer(Types.VARCHAR),
"java.lang.String"},
        {"name", new Integer(Oid.NAME), new Integer(Types.VARCHAR),
"java.lang.String"},
        {"bytea", new Integer(Oid.BYTEA), new Integer(Types.BINARY),
"java.io.InputStream"},
        {"bool", new Integer(Oid.BOOL), new Integer(Types.BIT),
"java.lang.Boolean"},
        {"bit", new Integer(Oid.BIT), new Integer(Types.BIT),
"java.lang.Boolean"},
        {"date", new Integer(Oid.DATE), new Integer(Types.DATE),
"java.sql.Date"},
        {"time", new Integer(Oid.TIME), new Integer(Types.TIME),
"java.sql.Time"},
        {"timetz", new Integer(Oid.TIMETZ), new Integer(Types.TIME),
"java.sql.Time"},
        {"timestamp", new Integer(Oid.TIMESTAMP), new
Integer(Types.TIMESTAMP), "java.sql.Timestamp"},
        {"timestamptz", new Integer(Oid.TIMESTAMPTZ), new
Integer(Types.TIMESTAMP), "java.sql.Timestamp"}

should be

private static final Object types[][] = {
        {"int2", new Integer(Oid.INT2), new Integer(Types.SMALLINT),
"java.lang.Short"},
        {"int4", new Integer(Oid.INT4), new Integer(Types.INTEGER),
"java.lang.Integer"},
        {"oid", new Integer(Oid.OID), new Integer(Types.INTEGER),
"java.lang.Integer"},
        {"int8", new Integer(Oid.INT8), new Integer(Types.BIGINT),
"java.lang.Long"},
        {"money", new Integer(Oid.MONEY), new Integer(Types.DOUBLE),
"java.lang.Double"},
        {"numeric", new Integer(Oid.NUMERIC), new
Integer(Types.NUMERIC), "java.math.BigDecimal"},
        {"float4", new Integer(Oid.FLOAT4), new Integer(Types.REAL),
"java.lang.Float"},
        {"float8", new Integer(Oid.FLOAT8), new Integer(Types.DOUBLE),
"java.lang.Double"},
        {"bpchar", new Integer(Oid.BPCHAR), new Integer(Types.CHAR),
"java.lang.String"},
        {"varchar", new Integer(Oid.VARCHAR), new
Integer(Types.VARCHAR), "java.lang.String"},
        {"text", new Integer(Oid.TEXT), new Integer(Types.VARCHAR),
"java.lang.String"},
        {"name", new Integer(Oid.NAME), new Integer(Types.VARCHAR),
"java.lang.String"},
        {"bytea", new Integer(Oid.BYTEA), new Integer(Types.BINARY),
"java.io.InputStream"},
        {"bool", new Integer(Oid.BOOL), new Integer(Types.BOOLEAN),
"java.lang.Boolean"},
        {"bit", new Integer(Oid.BIT), new Integer(Types.BIT),
"java.lang.Boolean"},
        {"date", new Integer(Oid.DATE), new Integer(Types.DATE),
"java.sql.Date"},
        {"time", new Integer(Oid.TIME), new Integer(Types.TIME),
"java.sql.Time"},
        {"timetz", new Integer(Oid.TIMETZ), new Integer(Types.TIME),
"java.sql.Time"},
        {"timestamp", new Integer(Oid.TIMESTAMP), new
Integer(Types.TIMESTAMP), "java.sql.Timestamp"},
        {"timestamptz", new Integer(Oid.TIMESTAMPTZ), new
Integer(Types.TIMESTAMP), "java.sql.Timestamp"}


Small code :
create table mytable(
    mybool boolean
);

ps = conn.prepareStatement("select count(*) from mytable  where mybool =
? ");
System.out.println(ps.getParameterMetaData().getParameterTypeName(1));
  ----> produce bool
System.out.println(ps.getParameterMetaData().getParameterType(1));
----> produce -7
System.out.println(Types.BOOLEAN);  ------> produce 16

So I cant' write :
if (ps.getParameterMetaData().getParameterType(1) == Types.BOOLEAN)





Best regards

Christian

PS

BRAVO for your work !!!!

Re: small bug

От
Kris Jurka
Дата:

On Mon, 1 Oct 2007, Christian Roux wrote:

> [boolean data is returned with a type of java.sql.Types.BIT
>  instead of BOOLEAN]

BIT and BOOLEAN are equivalent as far as JDBC is concerned.

http://archives.postgresql.org/pgsql-jdbc/2004-04/msg00107.php

Kris Jurka