0

我对 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);
    }
    

我希望你能帮助我。

4

1 回答 1

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 流式传输到磁盘。

于 2012-04-16T17:25:48.320 回答