我从csv中的客户端获得了一个相当大的数据集,我需要在Android中将其转换为sqlite。所以我有一个我写的方法来做 -
db.beginTransaction();
while ((line = bufRdr.readLine()) != null) {
try {
insertValues = line.split(",");
if (flag_is_header) {
row = this.insertRow(insertValues[0], insertValues[1], insertValues[2], insertValues[3], insertValues[4]);
} else {
flag_is_header = true; //so it skips the first line
}
} catch (Exception e) {
Log.e(TAG,"row# "+row+" error");
}
}
db.setTransactionSuccessful();
db.endTransaction();
它很有效。在5秒内插入9k行。
问题是某些数据在单元格中有换行符。即这 -
Steps needed
1 .....
2 .....
3 .....
可以是一个单元格的值,所以当我的循环到达换行符(在单元格内)时,它认为有一个新行要插入并且它会破坏代码。
有没有其他方法可以导入数据而不是使用换行符,还是我应该完全做其他事情?
感谢您的帮助
PS。我无法预先填充数据库并出于后勤原因发货。
答案 0 :(得分:1)
导出时,您可以用(例如)标签替换单元格中的换行符(或者使用奇怪的字符组合,例如“§#§”)。
然后,重新导入时,再次使用换行符替换选项卡
<强> [编辑] 强>
哦,这是来自Excel ......很好。它甚至更好,然后!!
您可以导出具有“?”的单元格的行
通过这样做,您知道什么属于单元格,哪个是真正的行终止符
导入时,只需删除多余的引号。
<强> [编辑] 强>
在excel中,当您导出为csv时,您可以选择将单元格保存为“引用”,因此将引用所有单元格。
像:
"CellA1", "CellA2", "This is a cell with spaces", "CellA4"
"CellB1", "CellB2", "CellB3", "This is a cell
with
carriage returns"
如果您选择这样做,它会在导出时自动