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的介紹到這里就結束了,有興趣的朋友也可以去看看源碼,學習一下其中的思路。