javivalle:
私は2つのVARRAY列を持っていて、テーブルに、JDBCを使用して挿入をやろうとしています。1は、int型のVARRAY、VARCHAR2の他のVARRAYです。最初の列は完全に挿入されています。しかし、もう一つはヌルとしてすべての値を挿入します。
これはテーブルです。
CREATE OR REPLACE TYPE ARRAY_DTBN_STRING AS VARRAY(10) OF VARCHAR2(100);
CREATE OR REPLACE TYPE ARRAY_DTBN_INTEGER AS VARRAY(10) OF int;
CREATE TABLE DTBN_DETAILS(
ID VARCHAR2(100) PRIMARY KEY ,
VALS ARRAY_DTBN_STRING,
SIZES ARRAY_DTBN_INTEGER
);
これは、JDBCを使用して挿入するためのJavaコードです:
DtbnDetails det = new DtbnDetails();
det.setId("ABC");
det.setValues(new String[] {"room","house"});
det.setSizes(new int[] {3,5});
String query = "INSERT INTO DTBN_DETAILS "+
"(ID, VALS, SIZES) VALUES (?, ?, ?)";
Connection conAux = Conexion.getConnection("main");
OracleConnection con = conAux.unwrap(OracleConnection.class);
PreparedStatement statement = con.prepareStatement(query);
int i=1;
String id = details.getId();
sentencia.setString(i++,id);
String[] values = details.getValues()==null ? new String[0] : details.getValues();
Array valuesArray = con.createOracleArray("ARRAY_DTBN_STRING", values);
statement.setArray(i++, valuesArray);
int[] sizes = details.getSizes()==null ? new int[0] : details.getSizes();
Array sizesArray = con.createOracleArray("ARRAY_DTBN_INTEGER", sizes);
statement.setArray(i++, sizesArray);
statement.execute();
con.commit();
このコードを実行した後、「VALS」の欄は、2つの値を有するが、両方がヌルです。
SELECT * FROM DTBN_DETAILS;
ABC
ARRAY_DTBN_STRING(NULL, NULL)
ARRAY_DTBN_INTEGER(3, 5)
SternK:
私はあなたと同じ問題に直面しました。ソリューションは、追加されたorai18n.jarをクラスパスに。
よると、この。
クライアントとサーバが異なる文字セットを使用する場合、ドライバはデータベース・キャラクタ・セットとクライアントの文字セット間の変換を実行するためのサポートを提供します。
基本的なojdbc JARファイルには、のための完全なグローバリゼーション・サポートを提供するために必要なすべてのクラスが含まれています:
CHAR、VARCHARのためのOracleキャラクタ・セット。Oracle 8のオブジェクトまたはコレクション型のデータ・メンバーとして取得または挿入されていないLONGVARCHAR、またはCLOBデータ。
文字セットUS7ASCII、WE8DEC、WE8ISO8859P1とUTF8のためのオブジェクトとコレクションのCHARまたはVARCHARデータメンバー。
オブジェクトまたはコレクションのCHARまたはVARCHARデータ・メンバーに、他の文字セットを使用するには、アプリケーションのCLASSPATHにorai18n.jarを含める必要があります。