JDBC driver doesn't handle NaN values
От | Jonathan Purvis |
---|---|
Тема | JDBC driver doesn't handle NaN values |
Дата | |
Msg-id | 3FFE198E.8080604@reeltwo.com обсуждение исходный текст |
Ответы |
Re: JDBC driver doesn't handle NaN values
|
Список | pgsql-bugs |
The JDBC driver that ships with PostgreSQL 7.4.1 doesn't insert floats of value NaN. As it uses Float.toString(x) to convert the value for insertion into the database, it tries to insert NaN instead of 'NaN' and gets the error "Attribute 'nan' not found". The same bug occurs for doubles and will probably occur for infinite values as well (i haven't tested it). This bug also exists in 7.2.4 and in the 7.2.1 version currently in Debian stable. Here is a patch for the "src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java" file. There may need to be other files changed (eg in the jdbc2 or jdbc3 directories), but i don't know where. 1062c1062,1063 < bind(parameterIndex, Float.toString(x), PG_FLOAT); --- > String value = Float.isNaN(x) ? "'NaN'" : Float.toString(x); > bind(parameterIndex, value, PG_FLOAT); 1075c1076,1077 < bind(parameterIndex, Double.toString(x), PG_DOUBLE); --- > String value = Double.isNaN(x) ? "'NaN'" : Double.toString(x); > bind(parameterIndex, value, PG_DOUBLE); 1553a1556,1559 > else if (x instanceof Float) > return ((Float) x).isNaN() ? "'NaN'" : x.toString(); > else if (x instanceof Double) > return ((Double) x).isNaN() ? "'NaN'" : x.toString(); 1555,1556c1561 < x instanceof Double || x instanceof Short || < x instanceof Number || x instanceof Float) --- > x instanceof Number || x instanceof Short) Regards, Jon
В списке pgsql-bugs по дате отправления: