使用JDBC和Oracle序列化ArrayList

时间:2012-01-04 09:24:27

标签: java serialization jdbc outputstream

我尝试序列化一个ArrayList,以便将其写入ORACLE数据库。

    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 Scheme如下:

 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

2 个答案:

答案 0 :(得分:1)

您应该使用PreparedStatement,并以参数方式设置每个字段。虽然BLOB可能很难使用,所以也许VARBINARY或者更好(如果您的数据相对较小,就像这里的情况一样)。

答案 1 :(得分: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);

您可以使用上述代码轻松更新。

相关问题