我使用這些方法。有幾件重要的事情要注意:
- sqlite表是特別的 - 確保你插入的數據適合你發送它的表的列。
- insertArrayList遍歷每一行,但在全部完成之前不會提交事務。這是爲了表現。
- rowValues將行數據轉換爲逗號分隔符的字符串,這就是sql所使用的內容
- rowValues還將單引號替換爲兩個單引號,sqlite將其用作轉義字符。您可能需要使用他人取決於你希望你的數據的內容是
代碼:
private String rowValues(ArrayList<String> rowdata) {
StringBuilder valString = new StringBuilder();
String separator = "";
valString.append("(");
for (String cell : rowdata) {
valString.append(separator + "'" + cell.replace("'", "''") + "'");
separator = ",";
}
valString.append(")");
return valString.toString();
}
public void insertArrayList(SQLiteDatabase db, String Table, ArrayList<ArrayList<String>> tabledata) {
Cursor cols = db.rawQuery("select * from " + Table + " limit 0",null);
db.beginTransaction();
try {
db.execSQL("delete from " + Table);
int Xtra = cols.getColumnCount() - tabledata.get(0).size();
for (ArrayList<String> item : tabledata) {
for (int a=0;a<Xtra;a++) {item.add("");}
db.execSQL("insert into " + Table + " values " + rowValues(item) + ";");
//Log.i("insertArrayList","insert into " + Table + " values " + rowValues(item) + ";");
}
db.setTransactionSuccessful();
} catch (Exception e) {
Log.e("DBWrapper", "insertArrayList error: " + e.getMessage());
} finally {
db.endTransaction();
}
}
我想你應該正常化您的數據庫,使一個一對多的關係。 – gerbit