sqlite 如何启用Android的所有内部SQL命令的日志记录?

j2datikz  于 6个月前  发布在  SQLite
关注(0)|答案(2)|浏览(68)

在我的学习过程中,我想专注于下一个时刻:确切地说,在Android/手机固件?框架?sys.Libs?SQL命令正在生成,以处理最终用户的软件的程序代码。纯粹的例子,我必须理解,并弄清楚它现在-如何,使用的正是联系人提供程序内的SQL命令运行以下程序代码:

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
ContentResolver resolver = context.getContentResolver();
try (Cursor cursor = resolver.query(uri, PROJECTION, null, null, null)) {
.....
}

字符串
简单地说:在Android Studio的控制台/Logcat中,我想找出类似的东西:“SELECT... FROM phone_lookup INNER JOIN... ON... WHERE... ORDER BY....”我正在使用与最新Android Studio捆绑的官方模拟器:Pixel_3a_API_30_x86.avd“智能手机”-所以使用root命令来实现这个目标应该不难。现在我无法实现它。我已经尝试了下一个调用:

adb shell setprop log.tag.SQLiteLog VERBOSE
adb shell setprop log.tag.SQLiteStatements VERBOSE
adb shell setprop db.log.slow_query_threshold 0

                   and next:
adb root
adb shell stop
adb shell start


没有结果。因此,我的问题是-如何和什么以及在哪里我必须使用/调用/设置/创建/删除,以查看所有内部的SQL命令正在执行/生成内部的Android的身体-内部的所有内部库/插件/等换句话说,在这一切创造了整个Android的工作环境在手机上的最终用户的软件。

xbp102n0

xbp102n01#

好吧,像往常一样-如果你想做什么-做它只由自己)

try (Cursor cursor = resolver.query(uri, PROJECTION, null, null, null))

字符串
如果在此命令行中输入最后一个参数100%错误字符串-例如“LIKE bananas”-在执行阶段,我们将获得错误“android.database.sqlite.SQLiteException:near“bananas”:语法错误(代码1)”与相应的staktrace,这将包括也和完整的SQL命令-在其中发现的错误。因此,我们可以很容易地得到的知识-正是通过它的SQL请求一个特定的URI请求正在进行。它将工作在真实的电话!因此,我们可以很容易地理解--以及为什么我们突然无法访问某个特定的数据列,而该列似乎出现在查询结果中(根据开发人员的在线帮助),但由于某种原因,在某些型号的手机上他们没有。现在它变得更容易理解-以及如何改写您的请求,基于“stacktraced exactly SQL”作为参考-但保证获得必要的数据作为其执行的结果!

axr492tv

axr492tv2#

使用这些 prop 时:

adb shell setprop log.tag.SQLiteLog VERBOSE
adb shell setprop log.tag.SQLiteStatements VERBOSE
adb shell setprop db.log.slow_query_threshold 0

                   and next:
adb root
adb shell stop
adb shell start

字符串
你应该通过执行'adb logcat'然后在你的设备上调用代码流来看到结果。查询将在日志中可见。

相关问题