2012-01-04 65 views
1

我試圖序列化ArrayList以便將其寫入ORACLE數據庫。使用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代碼:

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) 
    { 
    // ... 
    } 

我不知道如何把我的系列化的ArrayList在serializedArraylist

+0

「org.postgresql.Driver」您確定不需要oracle jdbc驅動程序 – vickirk 2012-01-04 09:26:09

+0

請注意:ObjectOutputStream並不是一個很好的選擇,最好是使用JSON或XML序列化數據以確保兼容性。 – Viruzzo 2012-01-04 09:28:41

回答

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); 

您可以使用上述代碼輕鬆更新。