再也不用担心调试数据库的问题了
2017-04-07 本文已影响263人
街头客
gif效果图
gif效果图背景
Android开发中比较让人蛋疼的其中一个问题就是关于数据库数据的操作。
一般我们能操作数据库无非就大概下面几个方法:
1,root过的手机,然后用手机连接电脑,电脑导出数据库;
2,采用模拟器建立模拟手机,然后用【Android Device Monitor】-->【File Exploer】进入【data】目录,获取数据库;
3,安装Android Studio插件,例如SQLScout,可以直接查看,但是。。。要钱;
然后在偶然的机会,我浏览到了Android Debug Database开源包,在build.gradle中配置后,可以很方便的利用浏览器对数据库进行操作。
Android调试数据库能做什么?
1,查看所有数据库;
2,在给定的数据库上运行SQL查询来更新和删除您的数据;
3,直接编辑数据库值。
4,直接删除数据库数据。
5,排序数据;
6,下载数据库。
build.gradle中配置
// 数据库调试 2017/4/6 09:20
debugCompile 'com.amitshekhar.android:debug-db:1.0.0'
编译后,运行app,在logcat中会打印出如下日志:
04-07 14:21:42.653 29009-29009/com.medtrust.doctor D/DebugDB: Open http://192.168.0.127:8080 in your browser
打开上面的网址,就可以很方面的操作数据库,如下图:
效果图需要注意的问题:
1,手机跟电脑得连接在同一网段下;
2,如果你想使用不同的端口以外的8080,在应用程序的build.gradle文件下buildtypes做如下的改变:
debug {
resValue("string", "PORT_NUMBER", "8081")
}
3,关于页面的操作请求,全部在【com.amitshekhar.server.RequestHandler.java】该路径下,在如下代码块中:
if (route.startsWith("getDbList")) { // 获取数据库列表
final String response = getDBListResponse();
bytes = response.getBytes();
} else if (route.startsWith("getAllDataFromTheTable")) { // 根据数据库名称,获取所有表数据
final String response = getAllDataFromTheTableResponse(route);
bytes = response.getBytes();
} else if (route.startsWith("getTableList")) { // 获取所有表
final String response = getTableListResponse(route);
bytes = response.getBytes();
} else if (route.startsWith("updateTableData")) { // 修改表数据
final String response = updateTableDataAndGetResponse(route);
bytes = response.getBytes();
} else if (route.startsWith("deleteTableData")) { // 删除表数据
final String response = deleteTableDataAndGetResponse(route);
bytes = response.getBytes();
} else if (route.startsWith("query")) { // 查询表数据
final String response = executeQueryAndGetResponse(route);
bytes = response.getBytes();
} else if (route.startsWith("downloadDb")) { // 下载数据库
bytes = Utils.getDatabase(mSelectedDatabase, databaseFiles);
} else {
bytes = Utils.loadContent(route, mAssets);
}
4,关于数据库的导出,我自己也做了如下尝试,也能把数据库拿出来:
String[] str = this.databaseList(); // 数据库名称列表
File file;
for (int i = 0; i < str.length; i++) {
file = this.getDatabasePath(str[i]); // 根据名称,获取数据库File
if (file != null) {
if ("ml_home".equals(str[i])) { // 获取对应的数据库名称
_exportDB(file);
}
}
}
/**
* 导出数据库 2017/4/6 11:29
* @param file 数据库文件
*/
private void _exportDB(final File file) {
Runnable runnable = new Runnable() {
@Override
public void run() {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(file);
File writeFile = new File(Environment.getExternalStorageDirectory(), "ml_home.db");
if (writeFile.exists())
writeFile.delete();
else
writeFile.createNewFile();
fos = new FileOutputStream(writeFile);
while (true) {
int i = fis.read();
if (i != -1) {
fos.write(i);
} else {
break;
}
}
fos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
fis.close();
} catch (IOException ioe) {
}
}
}
};
new Thread(runnable).start();
}
好了,这个Android Debug Database的介绍到这里就结束了,有兴趣的朋友也可以去看看源码,学习一下其中的思路。