3

Java/JDBC を使用して非常に長い文字列を Oracle データベースに挿入する方法がわかりません。

4000 文字を超える文字列があります。たとえば、6000 文字としましょう。この文字列を取得して、Oracle データベースに格納したいと考えています。

これを行う方法は、CLOB データ型を使用するようです。わかりましたので、列を記述 CLOB として宣言しました。

さて、実際にデータを挿入するときが来たら、準備済みステートメント pstmt があります。のように見えますpstmt = conn.prepareStatement(“INSERT INTO Table VALUES(?)”)

だから私は方法を使いたいpstmt.setClob()。ただし、文字列を含む Clob オブジェクトを作成する方法がわかりません。コンストラクターはありません (おそらく、使用可能なメモリよりもはるかに大きくなる可能性があるためです)。

String を Clob に入れるにはどうすればよいですか?

私は経験豊富なプログラマーではないことに注意してください。説明はできるだけ簡潔にするようにしてください。ここでは、効率性、優れた慣行などは問題ではありません。絶対に最も簡単なソリューションが必要なだけです。可能であれば、他のパッケージのダウンロードは避けたいと思います。現在、私はJDK 1.4とラベルが付いているものを使用していojdbc14.jarます。少し見回しましたが、見つけた説明のいずれにも従うことができませんでした。

Clobs を使用しないソリューションがある場合は、それも受け入れますが、それは 1 つの列である必要があります。

4

4 に答える 4

7

(少なくとも) 2 つのオプションがあります。

  • connection.createClob()を作成しClob、データを設定し、準備済みステートメントに設定するために使用します。これは、より小さなデータで機能します

  • use preparedStatement.setClob(position, reader)- ここにReaderインスタンスがあります。

于 2010-05-22T07:58:30.050 に答える
2

また、この以下のソリューションでは、PL/SQL を使用してこれを処理する方法について説明しています

参照: http://gogates.blogspot.com/2013/09/inserting-clob-data-which-is-more-than.html


4000 文字を超える CLOB データを Oracle テーブルに挿入する CLOB をデータ型として持つ Oracle テーブルに 4000 文字以上のデータを挿入しようとしましたが、単純な挿入ステートメントを使用してそれを行うことができませんでした。

私が使用したテーブル構造は以下の通りです

CREATE TABLE ClobTest (id number, clobData clob );

テーブル構造は非常に単純で、数値と clob データ型の 2 つの列しかありません。

さて...以下のクエリを実行すると、エラーなしで実行されます

INSERT INTO ClobTest VALUES(1, 'ClobTestData');

ただし、データ セットの長さを 4000 以上に増やすと、成功しなくなり、以下のようなエラーが発生します。

エラー レポート: SQL エラー: ORA-01704: 文字列リテラルが長すぎます 01704. 00000 - "文字列リテラルが長すぎます" *原因: 文字列リテラルが 4000 文字を超えています。*処置: 最大4000文字の文字列リテラルを使用してください。より長い値は、バインド変数を使用してのみ入力できます。

この問題をグーグルで調べた後、4000文字以上のデータをCLOBデータ型に挿入したい場合は、PL-SQLブロックを使用してそれを行うようにしてください。

これの根本的な原因は、Oracle SQL が 4000 文字を超える char / varchar データ型をサポートしていないことです。ただし、PL-SQL はそうします。

以下の匿名pl-sqlを使用して、4000以上の文字データをCLOBデータ型に挿入しました

DECLARE

vClob VARCHAR(8000);

BEGIN

vClob := '<Charater data having 4000+ characters>';

INSERT INTO ClobTest VALUES(1, vClob);

END;

クエリの下で実行されたターゲットに実際に 4000 以上の文字が挿入されたかどうかを確認するには

SELECT LENGHT(clobData) FROM ClobTest 

それが役立つことを願っています

于 2018-06-25T12:42:27.810 に答える
1

Oracle および JDBC で LOB 列を使用するためのoracle.comの例を次に示します。基本的に、空の LOB (BLOB と CLOB の両方を示しているため、実際には 2 つ) の LOB ロケーターを挿入し、更新のために行をロックし、BLOB および CLOB OutputStream インターフェイスを使用してデータを LOB に書き込みます。「SELECT ... FOR UPDATE」が解放されると、データベース内の LOB が更新され、新しく挿入されたデータが表示されます。

于 2010-05-22T08:02:42.663 に答える
0

Java Database Connectivity (JDBC) - 文字列を CLOB に変換し、Oracle データベースに挿入する方法を参照してください。

于 2010-05-22T08:04:46.853 に答える