I found a bug in the jdbc driver
От | innuendo-nh@libero.it |
---|---|
Тема | I found a bug in the jdbc driver |
Дата | |
Msg-id | HFAK36$29CA7B071D719D6E1A683B9A564D0E9F@libero.it обсуждение исходный текст |
Ответы |
Re: I found a bug in the jdbc driver
Re: I found a bug in the jdbc driver Re: I found a bug in the jdbc driver Re: I found a bug in the jdbc driver |
Список | pgsql-jdbc |
I have just found a bug in the latest jdbc driver. The error is in the class org.postgresql.jdbc2.AbstractJdbc2ResultSet the method parseQuery() has a bug: if you give as sql query something like "SELECT * FROM tablename;", that is a valid sql statement, and you try to use a resultset update method (like updateInt()), you receive an SQLException saying: No Primary Keys. this is because the method parseQuery() make a too simplified use of the StringTokenizer, so the variable tableName is set at something like this: "tablename;". So when the isUpdateable() method request for the primary keys of the table 'tablename;', postgres answers there are no rows (it can't fond any primary key for the table because it doesn't exists). The problem can be resolved writing the sql statement very carefully: you must insert blanks between any part of the sql statement (operators, keywords, ecc.). In my example the solution is to insert a blank before the semicolon ("SELECT * FROM tablename ;"). I think i can resolve the problem, modifying the driver, but i wuold be glad to know if someone else is already working at it now. I hope this can be useful. Inny.
В списке pgsql-jdbc по дате отправления: