android数据库调试管理工具FastAndr-dbms
来源:互联网 发布:mac win linux 编辑:程序博客网 时间:2024/06/10 04:02
由于在android开发中涉及到数据库方面的开发的过程中遇到很多麻烦和困扰,就着手写了个android数据库调试管理工具FastAndr-dbms,希望对大家有点帮助
二话不说,先上图
界面还是比较小清新….
框架功能使用
功能
- 可视化数据编辑界面
- 可配置服务端口号
- 可增、删、改、查 数据库及SharedPreference的数据
缺陷
1. 不可自定义sqlite语句查询
2. 数据库获取到的boolean型数据只能0或1显示
使用
- gradle添加
compile 'cn.hotapk:fastandr_dbms:0.4.0'
如果gson冲突
compile ('cn.hotapk:fastandr_dbms:0.4.0'){ exclude group: 'com.google.code.gson' }
- manifest添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
- 开启服务
try { FDbManager.init(this).startServer(); } catch (Exception e) { e.printStackTrace(); }
源码分析
1. http内网服务
由于要使用到内网数据传输,所有要用到http服务.
然后就选用了之前开源过的 FHttpServer http服务框架,这框架可以让你使用得更简单,方便.
使用上类似spring,这框架的好处就不多说了…
/** * @author laijian * @version 2017/11/25 * @Copyright (C)上午1:19 , www.hotapk.cn * web数据操作 */public class FDbController { /** * 获取数据库列表 * @return */ @ResponseBody @RequestMapping("getDbList") public ResponseData getDbList() { return FDbService.getDbList(); } /** * 获取table列表 * @param dbname * @return */ @ResponseBody @RequestMapping("getTables") public ResponseData getTables(@RequestParam("dbname") String dbname) { return FDbService.getTableList(dbname); }...
2. 获取db列表
获取db数据列表
List<String> templs = Arrays.asList(FDbManager.getAppContext().databaseList()); List<String> rows = new ArrayList<>(); for (int i = 0; i < templs.size(); i++) { if (!templs.get(i).matches(".*journal*.|undefined|.*xml|.*shared_prefs*.")) { rows.add(templs.get(i)); } }
Context.databaseList() sdk提供的方法就可以获取数据库列表了
获取数据库列表时,去除一些系统没用的数据库表
3. 获取sharedprefs数据列表
public static String getSharePrefsRootPath() { return FDbManager.getAppContext().getApplicationInfo().dataDir + "/shared_prefs"; }/** * 获取SharedPreference xml数据 * * @return */ public static List<String> getSharedPreferenceXMl() { ArrayList<String> tags = new ArrayList<>(); String rootPath = getSharePrefsRootPath(); File root = new File(rootPath); if (root.exists()) { for (File file : root.listFiles()) { String fileName = file.getName(); if (fileName.endsWith(".xml")) { tags.add(fileName); } } } Collections.sort(tags); return tags; }
Context.dataDir + “/shared_prefs” sdk提供的方法可以得到存放SharedPreference的路径
4. 获取数据库表名
/** * 获取数据库所有表名 * * @param database SQLiteDatabase * @return */ public static List<String> getAllTableName(SQLiteDatabase database) { List<String> tabs = new ArrayList<>(); Cursor cursor = database.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); try { if (cursor.moveToFirst()) { while (!cursor.isAfterLast()) { tabs.add(cursor.getString(0)); cursor.moveToNext(); } } } catch (Exception e) { } finally { if (cursor != null) { cursor.close(); } } return tabs; }
“SELECT name FROM sqlite_master WHERE type=’table’” sqlite语句可获取表名
5. 获取表数据
先获取表字段及类型
public static List<FieldInfor> getAllTablefield(SQLiteDatabase database, String tableName) { List<FieldInfor> fields = new ArrayList<>(); Cursor cursor = database.rawQuery("PRAGMA table_info([" + tableName + "])", null); if (cursor != null) { cursor.moveToFirst(); if (cursor.getCount() > 0) { do { FieldInfor fieldInfor = new FieldInfor(); for (int i = 0; i < cursor.getColumnCount(); i++) { final String columnName = cursor.getColumnName(i); switch (columnName) { case "name": fieldInfor.setTitle(cursor.getString(i)); break; case "type": fieldInfor.setType(cursor.getString(i)); break; case "pk": fieldInfor.setPrimary(cursor.getInt(i) == 1); break; default: } } fields.add(fieldInfor); } while (cursor.moveToNext()); } cursor.close(); }
“PRAGMA table_info([” + tableName + “])” sqlite语句可以获取表字段属性等
然后获取表数据
private static void getCursorData(Cursor cursor, List<FieldInfor> allTablefield, List<Map<String, Object>> datas) { if (cursor != null && cursor.moveToFirst()) { do { Map<String, Object> map = new HashMap<>(); for (int i = 0; i < allTablefield.size(); i++) { switch (allTablefield.get(i).getType()) { case FConstant.BLOB: map.put(allTablefield.get(i).getTitle(), blobToString(cursor.getBlob(i))); break; case FConstant.INTEGER: map.put(allTablefield.get(i).getTitle(), cursor.getInt(i)); case FConstant.REAL: map.put(allTablefield.get(i).getTitle(), cursor.getDouble(i)); default: map.put(allTablefield.get(i).getTitle(), cursor.getString(i)); break; } } datas.add(map); } while (cursor.moveToNext()); } }
sqlite 数据库有以下几种存储类型
6. 获取sharedprefs数据
/** * 获取pref的数据 * * @param prefname * @return */ public static List<Map<String, Object>> getPrefData(String prefname) { SharedPreferences preferences = FDbManager.getAppContext().getSharedPreferences(prefname.replace(".xml", ""), Context.MODE_PRIVATE); Map<String, ?> entries = preferences.getAll(); List<Map<String, Object>> datas = new ArrayList<>(); for (Map.Entry<String, ?> entry : entries.entrySet()) { Map<String, Object> map = new HashMap<>(); map.put("Key", entry.getKey()); map.put("Value", entry.getValue().toString()); if (entry.getValue() instanceof Integer) { map.put("dataType", FConstant.INTEGER); } else if (entry.getValue() instanceof Long) { map.put("dataType", FConstant.LONG); } else if (entry.getValue() instanceof Float) { map.put("dataType", FConstant.FLOAT); } else if (entry.getValue() instanceof Boolean) { map.put("dataType", FConstant.BOOLEAN); } else if (entry.getValue() instanceof Set) { map.put("dataType", FConstant.STRING_SET); } else { map.put("dataType", FConstant.TEXT); } datas.add(map); } return datas; }
以上是FastAndr-dbms框架的全部内容,谢谢观看,欢迎使用.
同时希望各位在使用中遇到什么问题或建议可以用以下联系方式进行反馈
个人博客
github地址(感兴趣的话,不妨点赞支持下)
- android数据库调试管理工具FastAndr-dbms
- symbian DBMS数据库
- 数据库管理系统 -DBMS
- 数据库管理系统DBMS
- JAVA中DBMS调试机制
- 01数据库、DBMS和SQL
- 数据库系统概述+相关DBMS
- HSQLDB 【Java开源 DBMS数据库】
- 数据库基础学习-了解DBMS
- 数据库管理系统DBMS概论
- 数据库管理系统(DBMS)
- DBMS
- DBMS
- DBMS
- DBMS
- 数据库管理工具
- 数据库(DB)与数据库管理系统(DBMS)
- Android sqlite3 数据库调试
- 在整个数据库搜索某个字符串在哪个表的哪个字段中
- 蓝桥杯 算法训练 矩阵乘法
- Android studio aidl找不到生成的 class文件
- Android开发&可实现信息滚动的控件——RollTextView
- 开启redis-server报错 # Creating Server TCP listening socket *:6379: bind: Address already in use--解决方法
- android数据库调试管理工具FastAndr-dbms
- 编译安装简要说明(configure && make && make install)
- Matlab之最近邻插值'nearest'
- java中数据进制转换和 数据类型转换
- oracle查询下条记录日期做为上条记录的结束日期
- winform listbox控件简单使用。
- Reinforcement Learning_By David Silver笔记三: Planning by Dynamic Programming
- uboot 网络不通问题解决一例1
- maven 刚创建就报错