使用SQLite进行数据收集

时间:2012-04-16 16:52:48

标签: java android database sqlite android-sdcard

我对android和SQL很新。我正在创建一个应用程序,它可以从加速度计获取数据,我将它们存储在SQLLite数据库中。之后我打算把数据库拿出来,这样我可以绘制数据。我有两个问题:

  1. 如何将数据保存为SD卡上的可用文件?我已经看过一些话题,但是我无法让它发挥作用。我想我需要一些示例/教程。

  2. 其次,经过一些收集,应用程序开始滞后。我想这是存储方法,在DB-class中是这样的:

    public long createEntry(float x, float y, float z, float t) {
    ContentValues cv = new ContentValues();
    cv.put(X_DATA,x);
    cv.put(Y_DATA,y);
    cv.put(Z_DATA,z);
    cv.put(TIME_DATA,t);
    return ourDatabase.insert(DATABASE_TABLE, null, cv);
    }
    
  3. 我希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

对于问题的第一部分,在事务中执行所有插入操作应该会更快。为此,在开始插入之前,请调用以下代码:

ourDatabase.beginTransaction()

然后,一旦完成数据插入,请致电:

ourDatabase.setTransactionSuccessful();
ourDatabase.getDb().endTransaction();

要回答问题的第二部分,您需要从数据库中检索数据并从中创建CSV文件:

        StringBuilder csv = new StringBuilder();

        Cursor cursor = this.db.query("Data", new String[] { "x","y", "z", "t" }, null, null, null, null, null);

        while (cursor.moveToNext()) {
            csv.append(cursor.getFloat(0))
            .append(",")
            .append(cursor.getFloat(1))
            .append(",")
            .append(cursor.getFloat(2))
            .append(",")
            .append(cursor.getFloat(3))
            .append("\n");
        }

cursor.close();

        File outputFile = new File("/sdcard/mycsv.csv");

        FileWriter writer;
        try {
            writer = new FileWriter(outputFile);

            writer.write(csv.toString());

            writer.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

如果您正在收集大量行(可能是数万个),则可能需要在写入此文件的同时将此CSV流式传输到磁盘。