Question

I have a java application which sets up a jdbc connection to an Orcale database. I am attempting to insert data into the database but am confused when it comes to the oracle NUMBER type. I have three columns in my table which are of these types respectively.

NUMBER(38,0)
NUMBER(20,0)
NUMBER(16,0)

My first question is what type of java type should I put the data in, in order to use it in a prepared statement.

My second question is what set operation can I use in a prepared statement in order to insert the data.

Lets just assume we are working with NUMBER(38,0). Would I set the java type to a BigInteger? If I had an integer 1 would it be

 BigInteger one = new BigInteger(1);

Then in my preparedStatement it would be

 PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(bigInt) VALUES(?)");
 pstmt.setLong(1, one);

This seems to not work, so I assume that this is not correct. Any help would be appreciated.

Was it helpful?

Solution

setLong() cannot take a BigInteger. If you truly have values exceeding the range of long in your database, then you may need to use setBigDecimal(), as there is no setBigInteger(), and your variable would have to be of type BigDecimal. If long encompasses the range of values in your database, then just use long and setLong().

OTHER TIPS

you can try this way:

 oracle.sql.NUMBER numberValue = new oracle.sql.NUMBER(bigIntegerValue);
 cs.setObject(id, numberValue, OracleTypes.NUMBER);

where bigIntegerValue is an instance of java.math.BigInteger, it works for me

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top