Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SQLite进行数据收集_Java_Android_Database_Sqlite_Android Sdcard - Fatal编程技术网

Java 使用SQLite进行数据收集

Java 使用SQLite进行数据收集,java,android,database,sqlite,android-sdcard,Java,Android,Database,Sqlite,Android Sdcard,我对android和SQL很陌生。我正在制作一个应用程序,它可以从加速计获取数据,并将它们存储在SQLLite数据库中。之后我打算把数据库拿出来,这样我就可以绘制数据了。我有两个问题: 如何将数据保存为SD卡上的可用文件?我看过一些主题,但我没能从中得到任何东西去工作。我想我需要一些例子/教程 其次,经过一些收集后,应用程序开始滞后。我猜是存储方法,在DB类中是这样的: public long createEntry(float x, float y, float z, float t) { C

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

  • 如何将数据保存为SD卡上的可用文件?我看过一些主题,但我没能从中得到任何东西去工作。我想我需要一些例子/教程

  • 其次,经过一些收集后,应用程序开始滞后。我猜是存储方法,在DB类中是这样的:

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

  • 我希望您能帮助我。

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

    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的同时将其流式输出到磁盘。

    第一部分确实很有帮助!大约在第二天。我应该把这个代码放在哪里?我是否应该在DBHelper类中将其作为方法,然后在每次需要将数据保存到文件时调用它?您可以将其放置在几乎任何位置,这取决于您的需要。不过,将它放在dbhelper中是有意义的,但我通常会将它放在单击按钮时。