2014-11-18 3 views
4

Для целей отладки/контрольной точки я хотел распечатать все строки базы данных SQLite на Android. Я не нашел ничего, что отвечало бы на этот точный вопрос: Как я могу легко распечатать все строки базы данных SQLite в удобном для восприятия формате?Печать всех строк базы данных SQLite в Android

ответ

13

Решения, которое я придумал, как это выглядит:

public class DbHelper extends SQLiteOpenHelper { 
    String TAG = "DbHelper"; 
    ... // functions omitted 


    /** 
    * Helper function that parses a given table into a string 
    * and returns it for easy printing. The string consists of 
    * the table name and then each row is iterated through with 
    * column_name: value pairs printed out. 
    * 
    * @param db the database to get the table from 
    * @param tableName the the name of the table to parse 
    * @return the table tableName as a string 
    */ 
    public String getTableAsString(SQLiteDatabase db, String tableName) { 
     Log.d(TAG, "getTableAsString called"); 
     String tableString = String.format("Table %s:\n", tableName); 
     Cursor allRows = db.rawQuery("SELECT * FROM " + tableName, null); 
     if (allRows.moveToFirst()){ 
      String[] columnNames = allRows.getColumnNames(); 
      do { 
       for (String name: columnNames) { 
        tableString += String.format("%s: %s\n", name, 
          allRows.getString(allRows.getColumnIndex(name))); 
       } 
       tableString += "\n"; 

      } while (allRows.moveToNext()); 
     } 

     return tableString; 
    } 

} 

Надеется, что это помогает некоторым из вас.

+0

Не забудьте закрыть курсор. –

+0

Ваш метод замечательный, но я бы хотел, чтобы я мог вернуть все столбцы отдельно в две строки. (у меня есть 2. один адрес электронной почты и один пароль). – Rishav

1

Еще одним быстрым вариантом было бы использовать корневое устройство, а затем экспортировать базу данных приложения на вашу машину разработки, чтобы ее можно было открыть с помощью настольного приложения, способного читать sqlite dbs. Существует также приложение в Google play, называемое SQL-отладчиком, которое вы можете использовать для просмотра баз приложений, но для этого снова требуется root.

+0

Спасибо за идею! Я вижу примеры использования, где это будет лучшим подходом. –

+0

Вам не нужно внедренное устройство для загрузки db на ПК разработки. – RaphMclee

+0

@ RalphMclee заботиться о разработке? –

1

Я немного изменил его: отделил курсор toString (может использоваться независимо), выполненный в виде таблицы.

public String tableToString(SQLiteDatabase db, String tableName) { 
    Log.d("","tableToString called"); 
    String tableString = String.format("Table %s:\n", tableName); 
    Cursor allRows = db.rawQuery("SELECT * FROM " + tableName, null); 
    tableString += cursorToString(allRows); 
    return tableString; 
} 

public String cursorToString(Cursor cursor){ 
    String cursorString = ""; 
    if (cursor.moveToFirst()){ 
     String[] columnNames = cursor.getColumnNames(); 
     for (String name: columnNames) 
      cursorString += String.format("%s ][ ", name); 
     cursorString += "\n"; 
     do { 
      for (String name: columnNames) { 
       cursorString += String.format("%s ][ ", 
         cursor.getString(cursor.getColumnIndex(name))); 
      } 
      cursorString += "\n"; 
     } while (cursor.moveToNext()); 
    } 
    return cursorString; 
}