Для целей отладки/контрольной точки я хотел распечатать все строки базы данных SQLite на Android. Я не нашел ничего, что отвечало бы на этот точный вопрос: Как я могу легко распечатать все строки базы данных SQLite в удобном для восприятия формате?Печать всех строк базы данных SQLite в Android
ответ
Решения, которое я придумал, как это выглядит:
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;
}
}
Надеется, что это помогает некоторым из вас.
Еще одним быстрым вариантом было бы использовать корневое устройство, а затем экспортировать базу данных приложения на вашу машину разработки, чтобы ее можно было открыть с помощью настольного приложения, способного читать sqlite dbs. Существует также приложение в Google play, называемое SQL-отладчиком, которое вы можете использовать для просмотра баз приложений, но для этого снова требуется root.
Спасибо за идею! Я вижу примеры использования, где это будет лучшим подходом. –
Вам не нужно внедренное устройство для загрузки db на ПК разработки. – RaphMclee
@ RalphMclee заботиться о разработке? –
Я немного изменил его: отделил курсор 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;
}
Не забудьте закрыть курсор. –
Ваш метод замечательный, но я бы хотел, чтобы я мог вернуть все столбцы отдельно в две строки. (у меня есть 2. один адрес электронной почты и один пароль). – Rishav