我尝试序列化一个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
。
答案 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);
您可以使用上述代码轻松更新。