Java / Android CSV到SQLite的技术问题

时间:2014-01-03 16:52:08

标签: java android sqlite csv line-breaks

我从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。我无法预先填充数据库并出于后勤原因发货。

1 个答案:

答案 0 :(得分:1)

导出时,您可以用(例如)标签替换单元格中的换行符(或者使用奇怪的字符组合,例如“§#§”)。
然后,重新导入时,再次使用换行符替换选项卡

<强> [编辑]

哦,这是来自Excel ......很好。它甚至更好,然后!!
您可以导出具有“?”的单元格的行 通过这样做,您知道什么属于单元格,哪个是真正的行终止符 导入时,只需删除多余的引号。

<强> [编辑]

在excel中,当您导出为csv时,您可以选择将单元格保存为“引用”,因此将引用所有单元格。

像:

"CellA1", "CellA2", "This is a cell with spaces", "CellA4"
"CellB1", "CellB2", "CellB3", "This is a cell
with
carriage returns"

如果您选择这样做,它会在导出时自动