Mar*_*.F. 27 database csv sqlite import android
我有一个.csv文件,我想将这个文件导入到android中的数据库中.
例如,.csv文件:
| id | name | dt1 | dt2 | dt3 |
| 1 | Paul | 21 | 98 | 91 |
| 2 | John | 22 | 44 | 11 |
| 3 | George| 21 | 31 | 22 |
| 4 | Ringo | 20 | 10 | 15 |
Run Code Online (Sandbox Code Playgroud)
对于这样的事情:
Cursor cursor = getWritableDatabase().
rawQuery("Insert into table1(_id, name, dt1, dt2, dt3)
values ( 1, Paul, 21, 98, 91)
values ( 2, John, 22, 44, 11)
values ( 3, George, 21,31,22)
values ( 4, Ringo, 20, 10,15);");
Run Code Online (Sandbox Code Playgroud)
那么,请问我该怎么做?
Chi*_*hod 40
试试以下代码,
FileReader file = new FileReader(fileName);
BufferedReader buffer = new BufferedReader(file);
String line = "";
String tableName ="TABLE_NAME";
String columns = "_id, name, dt1, dt2, dt3";
String str1 = "INSERT INTO " + tableName + " (" + columns + ") values(";
String str2 = ");";
db.beginTransaction();
while ((line = buffer.readLine()) != null) {
StringBuilder sb = new StringBuilder(str1);
String[] str = line.split(",");
sb.append("'" + str[0] + "',");
sb.append(str[1] + "',");
sb.append(str[2] + "',");
sb.append(str[3] + "'");
sb.append(str[4] + "'");
sb.append(str2);
db.execSQL(sb.toString());
}
db.setTransactionSuccessful();
db.endTransaction();
Run Code Online (Sandbox Code Playgroud)
Jan*_*hou 11
我建议使用ContentValues插入记录.它更容易,将逃避引用,并且不那么冗长.
像这样,(它也会跳过坏线):
...
BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
String line = "";
db.beginTransaction();
try {
while ((line = buffer.readLine()) != null) {
String[] colums = line.split(",");
if (colums.length != 4) {
Log.d("CSVParser", "Skipping Bad CSV Row");
continue;
}
ContentValues cv = new ContentValues(3);
cv.put(dbCol0, colums[0].trim());
cv.put(dbCol1, colums[1].trim());
cv.put(dbCol2, colums[2].trim());
cv.put(dbCol3, colums[3].trim());
cv.put(dbCol4, colums[4].trim());
db.insert(TABLE, null, cv);
}
} catch (IOException e) {
e.printStackTrace();
}
db.setTransactionSuccessful();
db.endTransaction();
Run Code Online (Sandbox Code Playgroud)
dbCol0等是数据库的列名,例如_id, name, dt1, dt2, dt3
.
db是您public SQLiteDatabase getReadableDatabase ()
在SQLiteOpenHelper中获得的数据库
将file.csv复制到assets文件夹中,并按如下方式读取:
String mCSVfile = "file.csv";
AssetManager manager = context.getAssets();
InputStream inStream = null;
try {
inStream = manager.open(mCSVfile);
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
...
Run Code Online (Sandbox Code Playgroud)