You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Kathey Marsden (JIRA)" <de...@db.apache.org> on 2006/04/09 20:40:24 UTC
[jira] Updated: (DERBY-1136) JDBC driver on rs.getFloat() gives
LossOfPrecisionConversionException for float fields containing
Float.MAX_VALUE
[ http://issues.apache.org/jira/browse/DERBY-1136?page=all ]
Kathey Marsden updated DERBY-1136:
----------------------------------
Fix Version: 10.2.0.0
> JDBC driver on rs.getFloat() gives LossOfPrecisionConversionException for float fields containing Float.MAX_VALUE
> -----------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-1136
> URL: http://issues.apache.org/jira/browse/DERBY-1136
> Project: Derby
> Type: Bug
> Components: JDBC
> Versions: 10.1.1.0
> Reporter: Mitesh Meswani
> Fix For: 10.2.0.0
> Attachments: 1136.diff, derby-1136-reg-test.diff, derby-1136-resultset-reg-test.diff, test.java
>
> I have a table created in the Derby database with a field as "float". I am able to successfully insert into this field the value FLOAT.MAX_VALUE (3.4028235E38). But when I try to query this field and try to use resultSet.getFloat() to retrieve this value I get a SQLException thrown.
> The derby driver that I am using is the one that is part of our Glassfish 9.0 build.
> The stack trace is :
> org.apache.derby.client.am.LossOfPrecisionConversionException: Invalid data conversion:Requested conversion would result in a loss of precision of 3.4028235E38
> at org.apache.derby.client.am.CrossConverters.getFloatFromDouble(Unknown Source)
> at org.apache.derby.client.am.Cursor.getFloat(Unknown Source)
> at org.apache.derby.client.am.ResultSet.getFloat(Unknown Source)
> at DerbyFloat.testFloat(DerbyFloat.java:121)
> at DerbyFloat.main(DerbyFloat.java:139)
> I have attached a simple java program that I have used to reproduce this problem.
> import java.sql.*;
> import java.lang.reflect.Method;
> import java.lang.reflect.Modifier;
> public class DerbyFloat {
>
> /* Derby */
> static final String userName = "APP";
> static final String password = "APP";
> static final String connectionURL =
> "jdbc:derby://localhost:1527/sun-appserv-samples;retrieveMessagesFromServerOnGetMessage=true;";
> static final String driverName = "org.apache.derby.jdbc.ClientDriver";
> Connection conn;
>
> public DerbyFloat() {}
>
> void init() throws SQLException {
> conn = getConnection(driverName, connectionURL, userName, password);
> }
>
> private static Connection getConnection(String driverName, String connectionURL,
> String userName, String password) throws SQLException {
> Connection conn = null;
> try {
> Class.forName (driverName);
> }
> catch (ClassNotFoundException e) {
> System.out.println("Could not load the driver class. Error is " + e);
> }
> try {
> conn = DriverManager.getConnection(connectionURL, userName, password);
> conn.setAutoCommit(false);
> } catch (SQLException e) {
> System.out.println("Error while getting connection");
> SQLException currentException = e;
> do {
> System.out.println("Exception is" + currentException);
> System.out.println(
> "getMessage()" + currentException.getMessage());
> System.out.println(
> "getErrorCode()" + currentException.getErrorCode());
> System.out.println(
> "getSQLState()" + currentException.getSQLState());
> currentException = currentException.getNextException();
> } while (currentException != null);
> throw e;
> }
> return conn;
> }
>
> public void insertRows() throws java.sql.SQLException {
> PreparedStatement ps;
> try {
> ps = conn.prepareStatement("DROP TABLE DERBYFLOAT");
> ps.executeUpdate();
> } catch (SQLException e) {
> System.out.println("Table does not exist");
> }
>
> ps = conn.prepareStatement("CREATE TABLE DERBYFLOAT (ID INT PRIMARY KEY, FLOATDATA FLOAT)");
> // ps = conn.prepareStatement("CREATE TABLE DERBYFLOAT (ID INT PRIMARY KEY, FLOATDATA FLOAT(24))");
> ps.executeUpdate();
>
> ps = conn.prepareStatement("DELETE FROM DERBYFLOAT");
> ps.executeUpdate();
> ps = conn.prepareStatement(
> "INSERT INTO DERBYFLOAT(ID, FLOATDATA) VALUES(1, 1)");
> ps.executeUpdate();
> ps = conn.prepareStatement(
> "INSERT INTO DERBYFLOAT(ID, FLOATDATA) VALUES(2, 124567890123456)");
> ps.executeUpdate();
> ps = conn.prepareStatement(
> "INSERT INTO DERBYFLOAT(ID, FLOATDATA) VALUES(3, 3.4028235E37)");
> ps.executeUpdate();
> ps = conn.prepareStatement(
> "INSERT INTO DERBYFLOAT(ID, FLOATDATA) VALUES(4, 3.4028235E38)");
> ps.executeUpdate();
>
> }
>
> public void testFloat() throws java.sql.SQLException {
> PreparedStatement ps = conn.prepareStatement(
> "SELECT ID, FLOATDATA FROM DERBYFLOAT");
> ResultSet rs = ps.executeQuery();
> ResultSetMetaData rsmd = rs.getMetaData();
> while(rs.next()) {
> /*
> Object o = rs.getObject(i);
> String columnTypeName = rsmd.getColumnTypeName(i);
> System.out.println("column " + (i) + " type: " + columnTypeName +
> " (" + rsmd.getColumnType(i) + ") " + "\t\tJava Type: " + o.getClass());
> */
> System.out.println("\n Value of field 1 uing getInt() : " + rs.getInt(1));
> try {
> System.out.println("\n Value of field 2 using getFloat() : " + rs.getFloat(2));
> } catch (SQLException e) {
> System.out.println("\n Value of field 2 using getFloat() resulted in a SQLException");
> e.printStackTrace();
> System.out.println("\n Value of field 2 using getObject() : " + rs.getObject(2));
> }
>
> }
>
> }
>
> public static final void main (String args [])
> {
> DerbyFloat dbFloat = new DerbyFloat();
> try {
> dbFloat.init();
> dbFloat.insertRows();
> dbFloat.testFloat();
> } catch (SQLException ex) {
> System.out.println("SQLException : "+ ex);
> ex.printStackTrace();
> }
> }
>
> }
>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira