在android上将大数据导入sqlite db - 需要太长时间。需要替代品

时间:2016-02-28 20:57:48

标签: android sqlite android-sqlite

我的应用程序有一个sqlite表...但是需要尽快添加/删除大量数据。我愿意接受很多选择。现在,我有大约35,000行,我可以在大约15秒内更新。我更喜欢更快的东西。基本上只需要一列作为我的辅助文本。

现在,用户下载了一个txt文件,然后该文件被传递给下面的方法。

public boolean installLanguageFile(String resourceId) {

        SQLiteDatabase db;
        db = new DataBaseHelper(getContext()).getWritableDatabase();
        try {

            File mFile = new File(getActivity().getFilesDir() + resourceId);

            InputStream insertsStream = new FileInputStream(mFile);
            BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream));

            long lengthOfFile = 34504;
            long total = 0;
            int rowId = 1;

            String sql = "UPDATE Story_Data SET text2 = ('?') WHERE _id = ?";
            db.beginTransaction();
            SQLiteStatement stmt = db.compileStatement(sql);
            while (insertReader.ready()) {
                total += rowId;
                stmt.bindString(1, insertReader.readLine());
                stmt.execute();
                stmt.clearBindings();
                publishProgress("" + (rowId * 100 / lengthOfFile));
                rowId++;
            }

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

            insertReader.close();

            //mCallback.reloadView();
            return true;

        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

    }

1 个答案:

答案 0 :(得分:0)

更新所有行需要数据库移动大量数据 如果可能,首先删除所有旧行,然后插入所有新行。

最快的方法是避免使用文本文件:将新数据作为数据库文件发送,将ATTACH更新文件发送到主数据库,然后在单个语句中复制数据,如下所示: / p>

INSERT INTO main.Story_Data(ID, text2) SELECT ID, text2 FROM updateDB.Story_Data;