【发布时间】:2014-01-15 20:28:01
【问题描述】:
我正在阅读此 CSV:
A;San Antonio;Tercer Barrio
B;Camino de la Miranda;Campus
C;San Lázaro;Cementerio
E;Cristo;H. Río Carrión
H;H. San Telmo;H. Río Carrión
M;Plaza de León;Monte el Viejo
P;Allende el Río;Campus
我想使用这种方法在 Android 中填充 SQLite 数据库:
private void insertRoutes(SQLiteDatabase db) {
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(context.getAssets().open(SQL_FILE_ROUTES)));
String query =
"insert into routes (name, rfrom, rto) values (?, ?, ?)";
db.beginTransaction();
SQLiteStatement stmt = db.compileStatement(query);
String line;
while ((line = reader.readLine()) != null) {
String[] dic = line.split(";");
stmt.bindString(1, dic[0]);
stmt.bindString(2, dic[1]);
stmt.bindString(3, dic[2]);
stmt.execute();
stmt.clearBindings();
}
db.execSQL(query);
db.setTransactionSuccessful();
} catch (IOException e) {
e.printStackTrace();
} finally {
db.endTransaction();
}
}
它“工作”并且我的数据库被填充,但有额外的行。这是我检查 sqlite 数据库时的结果:
sqlite> select * from routes;
1|A|San Antonio|Tercer Barrio
2|B|Camino de la Miranda|Campus
3|C|San Lázaro|Cementerio
4|E|Cristo|H. Río Carrión
5|H|H. San Telmo|H. Río Carrión
6|M|Plaza de León|Monte el Viejo
7|P|Allende el Río|Campus
8|||
有 8 行,但 CSV 文件只有 7 行。我做错了什么? 谢谢。
编辑
我已经检查了文件。它有 7 行:
wc default_android_routes.csv
7 25 198 default_android_routes.csv
编辑
就像@flopo 所说,db.execSQL(query); 是有罪的。只需将其删除。
【问题讨论】:
-
您确定 CSV 文件的底部没有空行吗?
-
是的,我已经检查过了(这是我首先想到的)。
-
您是否在循环中放置了一个系统,以便您可以准确地看到它正在解析什么以及循环在 java 端运行了多少次?还有可能您的表中已经有一个条目吗?
-
你试过
FileReader和while ((line = fileReader.hasNextLine()) != null)吗?它可能是一个简单的换行符导致额外的行。 -
实际上我认为这是与 Android 相关的问题。我在循环中放了一个 Log.v(),出现了 7 行。