2010-05-22 112 views
2

我不確定如何使用Java/JDBC將很長的字符串插入到Oracle數據庫中。如何使用Java/JDBC在Oracle數據庫中存儲長度超過4000個字符的字符串?

我有一個大於4000個字符的字符串,可以說它是6000.我想取這個字符串並將它存儲在Oracle數據庫中。

這樣做的方式似乎與CLOB數據類型。好的,所以我將該列聲明爲描述CLOB。

現在,當需要實際插入數據時,我有一個準備好的語句pstmt。它看起來像pstmt = conn.prepareStatement(「INSERT INTO Table VALUES(?)」)

所以我想使用方法pstmt.setClob()。但是,我不知道如何用它創建一個Clob對象;沒有構造函數(大概是因爲它可能比可用內存大得多)。

如何將我的字符串放入Clob?

請記住,我不是一個非常有經驗的程序員;請儘量保持儘可能簡單的解釋。效率,良好做法等在這裏不是問題,我只是想要絕對最簡單的解決方案。如果可能,我想避免下載其他軟件包;現在我只使用JDK 1.4,標記爲ojdbc14.jar。我已經環顧了一下,但是我沒有能夠遵循我找到的任何解釋。

如果您有一個不使用Clobs的解決方案,我也會對此開放,但它必須是一列。

回答

7

你(至少)兩個選項:

  • 使用connection.createClob()創建Clob,在其上設置數據,並將其設置在準備好的聲明。這將適用於較小的數據

  • 使用preparedStatement.setClob(position, reader) - 在這裏您將有一個Reader實例。

+0

啊,createClob()正是我一直在尋找。謝謝。 其實,我得到的錯誤: 線程「main」中的異常java.lang.AbstractMethodError:oracle.jdbc.driver.OracleConnection.createClob()Ljava/sql/Clob; 當我運行它。它來自以下行: Clob description = conn.createClob(); – Ventrue 2010-05-22 08:09:38

+2

這可能意味着您的jdbc驅動程序不是最新的。 – Bozho 2010-05-22 08:12:46

+0

那麼,數據庫是10.1.0.3,我沒有在Oracle網站上看到該版本的任何JDBC驅動程序下載......我假設我擁有的是10.1.0.3,但我無法確定。 可能值得注意的是,我使用Class.forName(「oracle.jdbc.driver。OracleDriver「); ,而不是一個import語句,我對這件事並不十分了解,但看起來好像可能是相關的 – Ventrue 2010-05-22 08:51:51

1

這是一個example at oracle.com用於在Oracle和JDBC中使用LOB列。基本上,它爲一個空的LOB(實際上是兩個,因爲它演示了BLOB和CLOB)插入一個LOB定位器,鎖定該行進行更新,然後使用BLOB和CLOB OutputStream接口將數據寫入LOB。當「SELECT ... FOR UPDATE」被釋放時,LOB將在數據庫中刷新並且新插入的數據將可見。

相關問題