2012-04-16 126 views
0

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

  1. 如何我可以将数据保存为SD卡上的可用文件?我看过一些话题,但我无法解决它的工作。我想我需要一些例子/教程。

  2. 其次,一些收集后,应用程序开始滞后。我想这是存储方法,它是这样的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); 
    } 
    

我希望你能帮助我。

回答

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到磁盘写作它的同时。

+0

第一部分确实帮了大忙!关于第二。我应该在哪里放置这段代码?我应该使它成为DBHelper类中的一种方法,然后每次调用它时需要将数据保存到文件中? – gedemagt 2012-04-16 19:53:39

+0

你可以将它放在任何地方,这取决于你的需求。把它放在你的dbhelper中虽然是有道理的,但是我通常会在点击一个按钮的时候放入它。 – 2012-04-16 19:55:11

+0

谢谢,它的作品就像一个魅力! :) – gedemagt 2012-04-16 21:55:12