Обсуждение: setBoolean with BIT column

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

setBoolean with BIT column

От
Kevin Schmidt
Дата:
Hi,

I am using PostgreSQL 7.2 and have a column of type BIT that I am
inserting into with a PreparedStatement.  In reading the Javadoc for
PreparedStatement, the setBoolean() method seems to be the correct way
to set a parameter for a BIT datatype as the description for the method is:

"Sets the designated parameter to the given Java boolean value.  The
driver converts this to an SQL BIT value when it sends it to the database."

When I try this though, I get an error:

"cannot parse t as a binary digit"

In looking at the PreparedStatement's SQL, it seems to be constructing
something like:

insert into myTable values('t')

which would explain the error message.

So, is this a bug in the JDBC driver in that it doesn't do the
conversion to an SQL BIT value when sent to the database like the
Javadoc says?  If not, what is the correct way to set a parameter to a
BIT value in a PreparedStatement?

I know I can probably use a BOOLEAN column and things will work fine,
but I expected this to work using a BIT datatype.

Thanks,

Kevin


Re: setBoolean with BIT column

От
Barry Lind
Дата:
Kevin,

BOOLEAN is the correct data type for the table.  BIT is not.  The BIT
datatype is a variable length datatype.  So you can create a table like
the following:

create table testbit (a bit(10));

So the column a is of datatype bit, but of length 10 (i.e. 10 bits).
Clearly setBoolean() isn't the correct method to be using to set the BIT
value in this case.

In postgres SQL_TYPES.BIT = the BOOLEAN datatype.  Where the BIT
datatype has different symantics than SQL_TYPES.BIT.

thanks,
--Barry


Kevin Schmidt wrote:
> Hi,
>
> I am using PostgreSQL 7.2 and have a column of type BIT that I am
> inserting into with a PreparedStatement.  In reading the Javadoc for
> PreparedStatement, the setBoolean() method seems to be the correct way
> to set a parameter for a BIT datatype as the description for the method is:
>
> "Sets the designated parameter to the given Java boolean value.  The
> driver converts this to an SQL BIT value when it sends it to the database."
>
> When I try this though, I get an error:
>
> "cannot parse t as a binary digit"
>
> In looking at the PreparedStatement's SQL, it seems to be constructing
> something like:
>
> insert into myTable values('t')
>
> which would explain the error message.
>
> So, is this a bug in the JDBC driver in that it doesn't do the
> conversion to an SQL BIT value when sent to the database like the
> Javadoc says?  If not, what is the correct way to set a parameter to a
> BIT value in a PreparedStatement?
>
> I know I can probably use a BOOLEAN column and things will work fine,
> but I expected this to work using a BIT datatype.
>
> Thanks,
>
> Kevin
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>