Alex Lipov..
13
假设Room使用框架的Sqlite作为基础数据库,则可以很简单地记录这些语句。唯一的限制:这只能在模拟器上完成。
/**
* Controls the printing of SQL statements as they are executed.
*
* Enable using "adb shell setprop log.tag.SQLiteStatements VERBOSE".
*/
public static final boolean DEBUG_SQL_STATEMENTS =
Log.isLoggable("SQLiteStatements", Log.VERBOSE);
默认情况下,log.tag.SQLiteStatements未设置的值:
alex @ mbpro:〜$ adb shell getprop log.tag.SQLiteStatements
根据上述文档,要设置属性,我们必须使用:
亚历克斯@ mbpro:〜$ ADB壳setprop log.tag.SQLiteStatements VERBOSE
亚历克斯@ mbpro:〜$ ADB壳getprop log.tag.SQLiteStatements
VERBOSE
如我们所见,该VERBOSE值已成功设置。但是,如果我们重新运行我们的应用程序-我们将看不到这些语句。为了使其正常工作,我们必须使用然后重新启动所有服务。
如果您尝试使用常规设备执行此操作,则会收到以下错误(已在Pixel XL / Android 9上尝试过): adb shell stopadb shell start
alex @ mbpro:〜$ adb shell start
开始:必须是root
alex @ mbpro:〜$ adb root
adbd无法在生产版本中作为root运行
这就是为什么我们必须使用仿真器的原因:
alex @ mbpro:〜$ adb root
以root身份重新启动adbd
alex @ mbpro:〜$ adb shell stop
alex @ mbpro:〜$ adb shell start
仿真器将重新启动。
运行您的应用程序,您将在logcat中看到类似的Sqlite语句:
V/SQLiteStatements: /my_db: "BEGIN EXCLUSIVE;"
V/SQLiteStatements: /my_db: "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)"
V/SQLiteStatements: /my_db: "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, "3cb5664b6da264c13388292d98141843")"
V/SQLiteStatements: /my_db: "CREATE TABLE IF NOT EXISTS `MyTable` (`id` TEXT NOT NULL, `date` INTEGER, `language` TEXT, PRIMARY KEY(`id`))"
V/SQLiteStatements: /my_db: "BEGIN EXCLUSIVE;"
V/SQLiteStatements: /my_db: "PRAGMA temp_store = MEMORY;"
V/SQLiteStatements: /my_db: "PRAGMA recursive_triggers='ON';"
V/SQLiteStatements: /my_db: "CREATE TEMP TABLE room_table_modification_log(version INTEGER PRIMARY KEY AUTOINCREMENT, table_id INTEGER)"
V/SQLiteStatements: /my_db: "COMMIT;"
V/SQLiteStatements: /my_db: "SELECT * FROM MyTable"
V/SQLiteStatements: /my_db: "SELECT * FROM MyTable WHERE date = 1551562171387 AND language = 'en'"
要撤消更改,请使用以下命令:
alex @ mbpro:〜$ adb shell setprop log.tag.SQLiteStatements \“ \”
alex @ mbpro:〜$ adb shell getprop log.tag.SQLiteStatements
alex @ mbpro:〜$ adb shell stop
alex @mbpro:〜$ adb shell启动
alex @ mbpro:〜$ adb
unroot以非root 身份重新启动adbd