Skip to Main Content

Java Database Connectivity (JDBC)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Double value 'infinity' causes IllegalArgumentException

2888967Feb 22 2015 — edited Feb 24 2015

Trying to bind the value Double.POSITIVE_INFINITY in a prepared statement causes an IllegalArgumentException using ojdbc6 11.2.0.4.0 but it works fine in version 11.2.0.3.0:

Exception in thread "main" java.lang.IllegalArgumentException: Overflow

    at oracle.jdbc.driver.OraclePreparedStatement.setDoubleInternal(OraclePreparedStatement.java:7605)

    at oracle.jdbc.driver.OraclePreparedStatement.setDouble(OraclePreparedStatement.java:7513)

    at oracle.jdbc.driver.OraclePreparedStatementWrapper.setDouble(OraclePreparedStatementWrapper.java:494)

    at DoubleOverflow.main(DoubleOverflow.java:26)

Source:

import java.sql.*;

import oracle.jdbc.pool.OracleDataSource;

public class DoubleOverflow

{

  public static void main (String[] args) throws SQLException {

    OracleDataSource ods = new OracleDataSource();

    ods.setUser(System.getProperty("DB_USER"));

    ods.setPassword(System.getProperty("DB_PASSWORD"));

    ods.setURL(System.getProperty("JDBC_URL"));

    Connection conn = ods.getConnection();

    PreparedStatement pstmtCreateTable = conn.prepareStatement("create table ojdbc6test (d BINARY_DOUBLE)");

    try {

        pstmtCreateTable.execute();

    } catch (Exception ex) {

        if (ex.getMessage().contains("ORA-00955")) {

            System.err.println("Test table already created - ignore SQL error and continue");

        } else throw ex;

    }

    pstmtCreateTable.close();

    PreparedStatement pstmt = conn.prepareStatement ("insert into ojdbc6test (d) VALUES (?)");

    // This will cause an IllegalArgumentException in ojdbc6 11.2.0.4.0 but not in 11.2.0.3.0

    pstmt.setDouble(1, Double.POSITIVE_INFINITY);

    pstmt.execute ();

    pstmt.close();

    conn.close();

  }

}

The database used is 'Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production'. I don't see any mention regarding changes to this in the 11.2.0.4.0 change log. Is this a bug in the driver or is there some other explanation?

Comments

camickr
I assume you mean JInternalFrame?

Remove the MouseListener from the JInternalFrame:
JInternalFrame f = frames[0];
BasicInternalFrameUI ui = (BasicInternalFrameUI)f.getUI();
Component north = ui.getNorthPane();
MouseMotionListener[] actions = (MouseMotionListener[])north.getListeners(MouseMotionListener.class);
for (int i = 0; i < actions.length; i++)
	north.removeMouseMotionListener( actions[i] );
843804
I assume you mean JInternalFrame?

Remove the MouseListener from the JInternalFrame:
JInternalFrame f = frames[0];
BasicInternalFrameUI ui =
(BasicInternalFrameUI)f.getUI();
Component north = ui.getNorthPane();
MouseMotionListener[] actions =
(MouseMotionListener[])north.getListeners(MouseMotionL
istener.class);
for (int i = 0; i < actions.length; i++)
	north.removeMouseMotionListener( actions[i] );
Yup, sorry jinternalframe is what I meant.

Ok that does lock it which is great, the only problem now, is when I click on the internal frame - it initially disappears (you can still find it on the toolbar on the bottom) - but it doesn't remain as the active window (when clicked on) - (I'm putting it inside a JWindow if that affects anything?)
cheers for the help.
camickr
JInternalFrame should be added to JDesktopPane.

How to Use Internal Frames:

http://java.sun.com/docs/books/tutorial/uiswing/components/internalframe.html

If you mean your adding the JDesktopPane to a JWindow, then I don't know what the problem might be I've never tried that.
843804
I've tried putting it in a desktop pane like the following:
jInternalFrame2.setBounds(0, 0, 600, 500);
jDeskTest.setBounds(0,0,600,500);
jWindowTest.setBounds(200,120,600,500);

jDeskTest.add(jInternalFrame2);
jWindowTest.getContentPane().add(jDeskTest);

BasicInternalFrameUI ui = (BasicInternalFrameUI)jInternalFrame2.getUI();
Component north = ui.getNorthPane();
MouseMotionListener[] actions=(MouseMotionListener[])north.getListeners(MouseMotionListener.class);
for (int i = 0; i < actions.length; i++)
	north.removeMouseMotionListener( actions[i] );

jWindowTest.setVisible(true);
jDeskTest.setVisible(true);
I add all my components to the internalframe, then add it to the desktoppane and then add that to the windowframe...its still giving me the problem I mentioned above...
camickr
I've never seen that behaviour and am not even going to try to guess whats wrong based on the lines of code you posted. If you post a 15 - 20 line demo program the illustrates your behaviour then I might take a look at it.
843804
Well, I'd have to post the whole project, because its going to be hard to emulate my problem in around 15-20 lines of code.
I'll play more, and see if other people have further thoughts or solutions...
cheers
camickr
Well, I'd have to post the whole project, because its going to be hard to emulate my problem in around 15-20 lines of code.
Thats the point. You may or may not be able to emulate the problem.

If you do emulate the problem then you have code to post on the forum.

If you don't emulate the problem then you've proven to yourself that a very simple application works normally. Now the next step is to compare this code with your existing code to see whats different. If you can't see whats different I don't know how you expect use to "guess" what your code looks like.
1 - 7
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Mar 24 2015
Added on Feb 22 2015
5 comments
4,787 views