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

+0

Вы можете разместить его в любом месте, это действительно зависит от ваших потребностей. Ввод его в ваш dbhelper имеет смысл, хотя, но я бы обычно помещал его одним нажатием кнопки. –

+0

Спасибо, это работает как шарм! :) – gedemagt

Смежные вопросы