2012-01-04 6 views
1

ArrayListをORACLEデータベースに書き込むためにArrayListをシリアル化しようとしました。JDBCとOracleでArrayListをシリアライズ

ArrayList<Long> lst2 = new ArrayList<Long>(); 
    lst2.add((long) 5); 
    lst2.add((long) 5); 
    lst2.add((long) 7); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    try { 
     new ObjectOutputStream(baos).writeObject(lst2); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

SQLスキームを次のように

create table T_2471785b1bf2475c9f292f73eeb 
(
"CLEARTXTID" NUMBER(38,0), 
"user" VARCHAR2(255), 
"tag" VARCHAR2(255), 
"object" NUMBER(19, 0), 
"objectList" BLOB 
, CONSTRAINT c_f2858bfc2a824579a630a934aea PRIMARY KEY ("CLEARTXTID" ) 
) 

を私は次のJavaコードを使用挿入するために:私はserializedArraylistで私のシリアル化されたのArrayListを置く方法がわからない

try 
    { 
    Class.forName("org.postgresql.Driver"); 

    Connection conn = DriverManager.getConnection("jdbc:...:testdb", 
     "user", "password"); 
    Statement statement = conn.createStatement(); 

    int result = statement.executeUpdate("INSERT INTO T_2471785b1bf2475c9f292f73eeb VALUES(5, 'Trude', 'Trudscherl',  42, !!serializedArraylist!!);"); 

    System.out.println("Eingefügte Datensätze: " + result); 

    statement.close(); 
    conn.close(); 
    } 
    catch(ClassNotFoundException e) 
    { 
    // ... 
    } 
    catch(SQLException e) 
    { 
    // ... 
    } 

を。

+0

"org.postgresql.Driver" oracle jdbcドライバを使用しないことをお勧めします。 – vickirk

+0

注:ObjectOutputStreamは実際には素晴らしい選択ではありません。互換性を保つために、JSONまたはXMLでデータをシリアル化する方がよいです。 – Viruzzo

答えて

1

PreparedStatementを使用し、各フィールドをパラメトリックに設定する必要があります。 BLOBは使用するのに苦労する可能性があるので、おそらくVARBINARYなどがより良いでしょう(データが比較的小さい場合は、ここにあるようです)。

1
String query = "INSERT INTO T_2471785b1bf2475c9f292f73eeb VALUES(5, 'Trude', 'Trudscherl', 42, "; 
for (int i = 0; i < lst2.size();) { 
    query += lst2.get(i); 
    i++; 
    if(i<lst2.size()){ 
     query += ", "; 
    } 
} 
query += ")"; 
int result = statement.executeUpdate(query); 
System.out.println("Eingefügte Datensätze: " + result); 

上記のコードを使用して簡単に更新できます。

関連する問題