Обсуждение: problems with types after update to 8.0
I just upgraded 7.4 to 8.0 and I have noticed that i am getting alot of error that are saying i have a type problem. Forexample it is saying big int expected but it was sent character varying. These same queries use to work in 7.4 I amusing java and jboss. My queries are all dynamic sql in prepared statements.
Jason Tesser wrote: > I just upgraded 7.4 to 8.0 and I have noticed that i am getting alot > of error that are saying i have a type problem. For example it is > saying big int expected but it was sent character varying. Is it right? Do you have an example you could give? > These > same queries use to work in 7.4 I am using java and jboss. My > queries are all dynamic sql in prepared statements. I'm guessing something is blindly quoting all values. Seems unlikely that it's the jdbc driver. Examples, please. -- Richard Huxton Archonet Ltd
Hi Richard and thank you for your help. Here is the actual message from
the pg log
ERROR: 42804: column "datetimein" is of type timestamp without time
zone but expression is of type character varying
HINT: You will need to rewrite or cast the expression.
I can aviod this by rewritting my queries and casting all the stuff
though I don't want to have to do this. I am trying to figure out what
is happening so I can find a proper solution, like I said this all
worked with pg 7.4
Here is my prepared statment in my java class
private static final String MANUALINSERT =
"insert into pactime (datetimein, pacpayperiodlink, wslink,
deptlink, commment, type) " +
"values ?,?,?,?,?,'man') ";
private static final String DATEOUTUPDATE =
"update pactime set datetimeout = timestamp, commment = ?,
type='man' where pactimeid =?";
and here si the way to fix but there are too many queires to have to
change them all.
private static final String MANUALINSERT =
"insert into pactime (datetimein, pacpayperiodlink, wslink,
deptlink, commment, type) " +
"values (cast(? as timestamp),?,?,?,?,'man') ";
private static final String DATEOUTUPDATE =
"update pactime set datetimeout = cast(? as timestamp), commment
= ?, type='man' where pactimeid =?";
here is where I am executing the statement in java
stmt = con.prepareStatement(DATEOUTUPDATE);
stmt.setString(1, dateout);
stmt.setString(2, comment);
stmt.setString(3, pactimeid);
On Tue, 2005-06-21 at 09:07 +0100, Richard Huxton wrote:
> Jason Tesser wrote:
> > I just upgraded 7.4 to 8.0 and I have noticed that i am getting alot
> > of error that are saying i have a type problem. For example it is
> > saying big int expected but it was sent character varying.
>
> Is it right? Do you have an example you could give?
>
> > These
> > same queries use to work in 7.4 I am using java and jboss. My
> > queries are all dynamic sql in prepared statements.
>
> I'm guessing something is blindly quoting all values. Seems unlikely
> that it's the jdbc driver.
>
> Examples, please.
>
Jason Tesser wrote: > Hi Richard and thank you for your help. Here is the actual message from > the pg log > > ERROR: 42804: column "datetimein" is of type timestamp without time > zone but expression is of type character varying > HINT: You will need to rewrite or cast the expression. > > I can aviod this by rewritting my queries and casting all the stuff > though I don't want to have to do this. I am trying to figure out what > is happening so I can find a proper solution, like I said this all > worked with pg 7.4 Are you sure the issue is the change from PG7.4=>PG8.0, or have you upgraded your jdbc package at the same time? > Here is my prepared statment in my java class > > private static final String MANUALINSERT = > "insert into pactime (datetimein, pacpayperiodlink, wslink, > deptlink, commment, type) " + > "values ?,?,?,?,?,'man') "; > and here si the way to fix but there are too many queires to have to > change them all. > > private static final String MANUALINSERT = > "insert into pactime (datetimein, pacpayperiodlink, wslink, > deptlink, commment, type) " + > "values (cast(? as timestamp),?,?,?,?,'man') "; > here is where I am executing the statement in java > > stmt = con.prepareStatement(DATEOUTUPDATE); > stmt.setString(1, dateout); > stmt.setString(2, comment); > stmt.setString(3, pactimeid); Hmm - should this not be something like: stmt.setTimestamp(1,dateout) / stmt.setDateTime(1,dateout) You'll have to consider the fact that I don't really do Java, but I'm guessing the "setString" has been tightened up in recent JDBC releases to mean "varchar" rather than just "quoted-undefined". There must be an equivalent method for timestamps. As a workaround, consider downgrading your jdbc (if you've upgraded it), or using an older protocol version (sorry, don't know how to specify this with jdbc). -- Richard Huxton Archonet Ltd
HI <snip?> > > Are you sure the issue is the change from PG7.4=>PG8.0, or have you > upgraded your jdbc package at the same time? I have upgraded the driver to the version that matched pg 8.0 > > Here is my prepared statment in my java class > > > > private static final String MANUALINSERT = > > "insert into pactime (datetimein, pacpayperiodlink, wslink, > > deptlink, commment, type) " + > > "values ?,?,?,?,?,'man') "; > > > and here si the way to fix but there are too many queires to have to > > change them all. > > > > private static final String MANUALINSERT = > > "insert into pactime (datetimein, pacpayperiodlink, wslink, > > deptlink, commment, type) " + > > "values (cast(? as timestamp),?,?,?,?,'man') "; > > > here is where I am executing the statement in java > > > > stmt = con.prepareStatement(DATEOUTUPDATE); > > stmt.setString(1, dateout); > > stmt.setString(2, comment); > > stmt.setString(3, pactimeid); > > Hmm - should this not be something like: > stmt.setTimestamp(1,dateout) / stmt.setDateTime(1,dateout) That would be a better :-) way to do it but for now I am just trying to deal with the code that is there :-)
Jason Tesser wrote: > HI > > <snip?> > >>Are you sure the issue is the change from PG7.4=>PG8.0, or have you >>upgraded your jdbc package at the same time? > > > I have upgraded the driver to the version that matched pg 8.0 I think your previous version should work just fine. >>>here is where I am executing the statement in java >>> >>> stmt = con.prepareStatement(DATEOUTUPDATE); >>> stmt.setString(1, dateout); >>> stmt.setString(2, comment); >>> stmt.setString(3, pactimeid); >> >>Hmm - should this not be something like: >> stmt.setTimestamp(1,dateout) / stmt.setDateTime(1,dateout) > > > That would be a better :-) way to do it but for now I am just trying to > deal with the code that is there :-) Try downgrading to the previous jdbc driver and see if that works around your problems. -- Richard Huxton Archonet Ltd