2012-04-16 59 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