请你帮我解决这个问题。
我将值插入我的Sqlite数据库。
如何查看或查看插入的数据。
是否有任何工具或其他技术可以显示数据?
答案 0 :(得分:7)
如果您想在Log
上显示数据,请尝试以下代码:
for (Contact cn : contacts) {
String log = "Id: "+cn.getID()+" ,Name: " + cn.getName() + " ,Phone: " + cn.getPhoneNumber();
// Writing Contacts to log
Log.d("Name: ", log);
其他展示database
的方式见下面的步骤:
Tools -> DDMS
或单击工具栏中SDK Manager旁边的设备监视器图标。data -> data -> your project name.
之后,将打开数据库文件。单击pull a file from device icon.
使用.db扩展名保存文件。Tools -> SQLiteManager.
如果您在DDMS
下载数据库,则下载
DB.Browser.for.SQLite-3.10.1-Win64的
并将database
文件放在此软件上,然后获取数据。
我现在更新我的答案becoz现在Android Studio 3.1中的Android Studio更新或现在的其他类似的3.2,在此Studio DDMS 功能不可用但不要担心我有另一个解决方案。
在Android工作室中查看右侧底角有一个选项,如设备文件资源管理器点击此按钮
之后您可以看到下面的图像在屏幕上打开:
现在选择data -> data -> your project name.
:)
答案 1 :(得分:5)
我无法相信没有人提到这一点,但你可能正在寻找的是Android Debug Database
同样适用于Android Room,您可以查看,编辑表格和记录。
答案 2 :(得分:3)
虽然您已批准Cassius Clay's
答案,但如果您需要处理原始数据
root不需要(如果它不在sdcard上,请关注@Ankit的回答)
import os
import sys
import subprocess
import sqlite3
import pandas as pd
arg_folder = sys.argv[1] # root folder to recursively search db files from
output_lines = subprocess.check_output(['adb', 'shell', ('ls -R %s' % arg_folder)]).decode('utf-8').splitlines()
db_files = []
current_folder = ''
for line in output_lines:
"""
Output example for 'ls -R /data/data':
/data/data/org.fdroid.fdroid/files/fdroid/repo/icons:
/data/data/org.fdroid.fdroid/shared_prefs:
apks-pending-install.xml
org.fdroid.fdroid_preferences.xml
/data/data/ru.meefik.busybox:
cache
files
lib
shared_prefs
if line contains '/' it's a directory, we want to extract the full path for '.db' files
"""
if line.__contains__('/'):
current_folder = line
elif line.endswith('.db'):
db_files.append('%s/%s' % (current_folder[:-1], line))
print("Listing databases..")
while True:
try:
for idx, full_path in enumerate(db_files):
print("{}) {}".format(idx + 1, full_path))
i = input("Enter database number : ")
db = db_files[int(i) - 1] # selected database
subprocess.check_output(['adb', 'pull', db]) # pulling the .db file from device to local
db = db.split('/')[-1] # "/data/data/com.app/folder/private.db".split('/')[-1] = private
conn = sqlite3.connect(db)
# getting list of current database tables
tables = conn.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall()
for table in tables:
table = table[0] # little fix, it comes as a tuple
print('%s%s' % (db[:-2], table))
with pd.option_context('display.width', 1000): # setting terminal width to view all table columns inline
print(pd.read_sql_query("SELECT * FROM %s" % table, conn)) # print table content
print('- ' * 50) # table print separator
# cleanup
if input('remove database file (from local) [y/N] ? ').lower() == 'y':
print('removing ', db)
os.remove(db)
# repeat
c = input("Press ENTER to continue or CTRL+C to Quit..")
except KeyboardInterrupt:
exit(0)
这是一个不那么人性化的非常长的单线
read -p "enter root folder to recursively search db files from: " f;dbs=( $(adb shell ls -R $f |
while read line
do
line=$(echo $line | tr -d '\r')
if [[ "$line" =~ ^/.*:$ ]]
then
dir=${line%:}
elif [[ "$line" = "opendir failed" ]]
then
echo "$dir - permission denied"
else
if [[ "$dir" = "/" ]]; then dir=""; fi
echo "$dir/$line" | grep '\.db$'
fi
done)
);echo ${dbs[@]}; dbs+=(exit);select db in "${dbs[@]}"; do
[[ $db == exit ]] && break
echo "You have chosen $db"
adb pull $db
python -c 'import sqlite3;import pandas as pd;db=sqlite3.connect("'${db##*/}'");tables=db.cursor().execute("SELECT name FROM sqlite_master WHERE type=\"table\";").fetchall();print([pd.read_sql_query("SELECT * FROM %s" % t[0], db) for t in tables]);'
done
GIF,因为我懒得记录
答案 3 :(得分:2)
DDMS方法无法在非root设备中使用
我按照How to check database on not rooted android device将Sqlite DB从设备导入PC。
按照给定的步骤进行操作:
adb shell run-as [package] chmod 777 / data / data / [package] / databases /
adb shell run-as [package] chmod 777 / data / data / [package] / databases / [db_file_name]
adb shell run-as [package] cp / data / data / [package] / databases / [db_file_name] / sdcard /
adb pull / sdcard / [db_file_name]
4.在文件夹sdk> platform-tools
中检查拉出的SQLite DB现在您可以使用任何SQLite Viewer来查看提取的数据库。
注意:清单文件中需要两个权限,否则数据不会被复制到数据库中
android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_EXTERNAL_STORAGE
答案 4 :(得分:0)
您可以使用此库(数据库调试数据库)添加,编辑,检查所有数据库表数据,包括共享首选项数据 Follow this link to install。
所有您需要做的就是放下依赖项,编译并运行程序,您将在logcat中找到一个类似(your_package_name D / DebugDB:在浏览器中打开http://172.16.6.117:8081的链接),该链接将显示所有浏览器上的数据库
答案 5 :(得分:0)
针对Android应用程序的最佳Sqlite调试工具是
Stetho 通过Facebook
http://facebook.github.io/stetho/
Stetho是用于Android应用程序的复杂调试桥。启用后,开发人员可以访问Chrome桌面浏览器本地提供的Chrome开发者工具功能。开发人员还可以选择启用可选的dumpapp工具,该工具为应用程序内部提供了强大的命令行界面。
下载 或或者,您可以通过Gradle或Maven从Maven Central包含Stetho。
// Gradle dependency on Stetho
dependencies {
compile 'com.facebook.stetho:stetho:1.5.1'
}
<dependency>
<groupid>com.facebook.stetho</groupid>
<artifactid>stetho</artifactid>
<version>1.5.1</version>
</dependency>
仅严格要求主要的Stetho依赖关系,但是您可能还希望使用网络助手之一:
dependencies {
compile 'com.facebook.stetho:stetho-okhttp3:1.5.1'
}
或
dependencies {
compile 'com.facebook.stetho:stetho-okhttp:1.5.1'
}
或
dependencies {
compile 'com.facebook.stetho:stetho-urlconnection:1.5.1'
}
集成
设置
与Stetho集成旨在使大多数现有的Android应用程序无缝且直接。 Application class:
public class MyApplication extends Application {
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
这将显示大多数默认配置,但不会启用某些其他挂钩(最值得注意的是网络检查)。有关各个子系统的详细信息,请参见下文。
Enable Network Inspection
如果您正在使用2.2.x +或3.x发行版中流行的OkHttp库,则可以使用Interceptors系统自动挂钩到现有堆栈中。这是目前启用网络检查的最简单,最直接的方法。
对于OkHttp 2.x
OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor());
对于OkHttp 3.x
new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
由于拦截器可以修改请求和响应,因此请在所有其他拦截器之后添加Stetho拦截器,以准确了解网络流量。
如果您使用的是HttpURLConnection
,则可以使用StethoURLConnectionManager
来帮助集成,尽管您应该意识到这种方法存在一些注意事项。特别是,您必须在请求标头中明确添加Accept-Encoding: gzip
并手动处理压缩的响应,以便Stetho报告压缩的有效负载大小。
有关更多信息,请访问stetho