【发布时间】:2014-11-18 20:32:16
【问题描述】:
出于调试/检查点的目的,我想在 Android 中打印出 SQLite 数据库的所有行。我没有找到任何东西可以回答这个精确的问题:如何以人类可读的格式轻松打印 SQLite 数据库的所有行?
【问题讨论】:
出于调试/检查点的目的,我想在 Android 中打印出 SQLite 数据库的所有行。我没有找到任何东西可以回答这个精确的问题:如何以人类可读的格式轻松打印 SQLite 数据库的所有行?
【问题讨论】:
我想出的解决方案是这样的:
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;
}
}
希望这对你们中的一些人有所帮助。
【讨论】:
我稍微改了一下:把Cursor分隔成字符串(可以独立使用),设计成表格打印。
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;
}
【讨论】:
另一个更快的选择是使用有根设备,然后将应用程序数据库导出到您的开发机器,以便使用能够读取 sqlite dbs 的桌面应用程序打开。 Google play 上还有一个名为 sqlite 调试器的应用程序,您可以使用它来查看应用程序数据库,但这又需要 root。
【讨论】: