2013-06-27 54 views
3

我有一個java應用程序,它建立了一個到Orcale數據庫的jdbc連接。我試圖將數據插入到數據庫中,但在涉及到Oracle NUMBER類型時感到困惑。我的表中有三列分別是這些類型的列。jdbc用oracle編寫語句NUMBER類型

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

我的第一個問題是我應該放什麼類型的Java類型的數據,以便在一份聲明中使用它。

我的第二個問題是可以在準備好的語句中使用哪些set操作來插入數據。

讓我們假設我們正在使用NUMBER(38,0)。我會將java類型設置爲BigInteger嗎?如果我有1的整數這將是

BigInteger one = new BigInteger(1); 

然後在我的preparedStatement時它會

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

這似乎不工作,所以我認爲這是不正確的。任何幫助,將不勝感激。

+0

你嘗試setBigDecimal()http://docs.oracle.com/javase/ 6/docs/api/java/sql/PreparedStatement.html#setBigDecimal(int,java.math.BigDecimal) –

+0

@BhavikShah我試過setBigDecimal,它仍然給我ORA-00911:無效字符。我甚至建立和打印出SQL插入語句,然後將其粘貼到SQL開發人員,它工作正常。它只是在Java內失敗。 – medium

+0

我跟着幾個SO問題類似這個..沒有答案不幸的是:(..一個答案,但建議將它存儲爲字符串..做這個工作給你嗎? –

回答

4

setLong()不能採取BigInteger。如果數據庫中的值真的超過long,那麼您可能需要使用setBigDecimal(),因爲沒有setBigInteger(),您的變量必須是BigDecimal。如果long包含數據庫中的值範圍,則只需使用longsetLong()

1

你可以試試這個方法:

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

其中bigIntegerValuejava.math.BigInteger一個實例,它爲我工作