如何直接在android上将CSV文件插入到SQLite数据库中

时间:2015-07-31 05:34:33

标签: android

我正在从服务器上下载一个csv。我必须将其数据插入到sqlite数据库表(单个表)中。我从服务器获取文件文件并将其保存在SD卡上。这是我阅读Csv文件的代码

public synchronized void insertAllDataToDB(String path) {
    FileReader file = null;
    try {
        file = new FileReader(path);
    }  catch (IOException e) {
        e.printStackTrace();
    }
    BufferedReader buffer = new BufferedReader(file);
    String line = "";
    sqLite.beginTransaction();
    try {
        while((line = buffer.readLine()) != null) {
            String[] str = line.split(",");
            ContentValues values=new ContentValues(4);
            if(str.length!=8){
                continue;
            }
            values.put(col1,str[0]);
            values.put(col2,str[1]);
            values.put(col3,str[2]);
            values.put(col4,str[3]);
            values.put(col5,str[4]);
            values.put(col6,str[5]);
            values.put(col7,str[6]);
            sqLite.insert(TABLE_NAME,null, values);
            Log.e("Inserted",values.toString());
        }
    } catch (SQLException | IOException e) {
        e.printStackTrace();
        Log.e("Exception",e.getLocalizedMessage());
    }
    finally{

    }
    sqLite.setTransactionSuccessful();
    sqLite.endTransaction();
}

它工作得很好,但问题是我的Csv文件数据在其列数据中有逗号本身,当我从逗号分割它时它也分割数据..任何人都可以告诉我如何摆脱这个问题。或者任何人都有另一种方法来实现这一点提前谢谢..我被困了

1 个答案:

答案 0 :(得分:2)

我这样做是为了将美国的状态加载到我的应用程序中:

Scanner scanner = new Scanner(mContext.getResources().openRawResource(R.raw.states_csv));

db.beginTransaction();
String line;
while(scanner.hasNextLine() && ((line = scanner.nextLine()) != null)) {
    String[] values = line.split(",");
    if(values.length != 4)
        continue;

    for(int i = 0; i < values.length; i++)
        values[i] = values[i].replace("\"", "");

    ContentValues contentValues = new ContentValues();
    contentValues.put(States.NAME, values[2]);
    contentValues.put(States.CODE, values[1]);
    contentValues.put(States.COUNTRY_CODE, values[3]);

    db.insert(States.TABLE_NAME, null, contentValues);
}

db.setTransactionSuccessful();
db.endTransaction();

我将.csv文件放入res / raw文件夹,它运行正常。