Android sqlite3 数据库调试
2015-11-23 02:30
405 查看
最近做一个项目,数据逻辑比较复杂, 我建了一些表,然后写了些接口给同事调用, 关于数据逻辑在提供的接口里完成, 实现过程中需要解决这样的问题:
需要很多情形的数据,数据本身存在逻辑关系。
Android中没有数据输入, 可以将数据库导入电脑直接操作,由于数据要做些换算,调试一次要换算很久。
关闭日志只需要把V改成”“,就可以了。 (V 表示 VERBOSE,源码中只检查首字符,所以这里可以是Vxxx)。
另外,如果有root权限想用adb shell直接操作数据库,请参考这里
2.可以通过脚本实现,python支持sqlite3,考虑到这里生成的数据需要根据一些条件进行运算和推算,用python脚本的方式比较方便。
adb pull导入db,然后写好python脚本。python有库直接支持sqlite3,使用起来很简单,下面是个示例:
然后需要做得就是写好数据逻辑和日志:
我这里把日志打成markdown格式,方便观察和分析:
这样根据特定逻辑生成了我想要的数据,下一步使用adb push 推入虚拟机就可以进行验证。
文章很简单,紧紧是一个思路,对于比较直观的数据直接使用方式一,然后通过Root Explore查看数据即可。用脚本语言来实现,往往可以节约大量的时间,而且准确率也会有所提高。
http://jungledroid.gitcafe.io/sqlite3-test.html
需要很多情形的数据,数据本身存在逻辑关系。
Android中没有数据输入, 可以将数据库导入电脑直接操作,由于数据要做些换算,调试一次要换算很久。
解决方式
1.启用sqlite3日志,老老实实在程序中根据sqlite的日志,调试和生成数据,命令如下:adb shell setprop log.tag.SQLiteLog V adb shell setprop log.tag.SQLiteStatements V adb shell stop adb shell start
关闭日志只需要把V改成”“,就可以了。 (V 表示 VERBOSE,源码中只检查首字符,所以这里可以是Vxxx)。
另外,如果有root权限想用adb shell直接操作数据库,请参考这里
2.可以通过脚本实现,python支持sqlite3,考虑到这里生成的数据需要根据一些条件进行运算和推算,用python脚本的方式比较方便。
adb pull导入db,然后写好python脚本。python有库直接支持sqlite3,使用起来很简单,下面是个示例:
import sqlite3 con = sqlite3.connect("C:/Users/dell/Desktop/db/sh-db") cur = con.cursor() cur.execute('SELECT * FROM CY') print (cur.fetchall()) cur.execute('delete from CY') con.commit()
然后需要做得就是写好数据逻辑和日志:
def generateDatetimeBefore(start,endDelta,cyLength): endDatetime = start - timedelta(days = endDelta) startDatetime = endDatetime - timedelta(days = cyLength - 1) startMsg = millionsPattern%(realDateTimeStr(startDatetime),dateToMillions(startDatetime)) endMsg = millionsPattern%(realDateTimeStr(endDatetime),dateToMillions(endDatetime)) print("| %s | %s | %s | %d | %d |"%(startMsg, endMsg, membershipId, cyLength, peLength)) data = [dateToMillions(startDatetime), dateToMillions(endDatetime), id,cyLength,peLength] cur.execute(insertSql,data) con.commit() return startDatetime
我这里把日志打成markdown格式,方便观察和分析:
lastCycleStart = dateToday + timedelta(days = 1); lastCycleEnd = lastCyStart + timedelta(days=cyleLength-1) print("cyle dateToday:") print(" ",dateToday.strftime("%Y-%m-%d")) print("============================") print("| xxx | xxx | xx | xxxx | xxxx|") print("|-----------|---------|----------|--------------|-------------|") generateCurrentPredict(lastCyStart) start = generateDatetimeBefore(lastCyStart,1,cyLength) start = generateDatetimeBefore(start,1,cyLength) start = generateDatetimeBefore(start,1,cyLength) start = generateDatetimeBefore(start,1,cyLength) print (cur.fetchall()) con.close()
这样根据特定逻辑生成了我想要的数据,下一步使用adb push 推入虚拟机就可以进行验证。
文章很简单,紧紧是一个思路,对于比较直观的数据直接使用方式一,然后通过Root Explore查看数据即可。用脚本语言来实现,往往可以节约大量的时间,而且准确率也会有所提高。
http://jungledroid.gitcafe.io/sqlite3-test.html
相关文章推荐
- android实现文件下载
- Android实践项目汇报(三)
- Chromium硬件加速渲染的GPU数据上传机制分析
- Android项目开发三
- Android开发环境搭建
- Android异常处理——try、catch、finally、throw、throws
- android studio 学习心得
- [Android]_[ACtivity生命周期]
- Android开发规范基础
- 11.22 java,android,classLoder,插件式开发,类的热替换,android热更新原理
- [Android]_[常用ADB命令]
- Android开发之listview 的使用中Item获取焦点的处理
- Android 开发之自定义滑动开关
- Android开发之细说ListView上拉加载,下拉刷新过程
- ViewPager如下效果你研究过吗?
- android 开发环境 ubuntu 12.04
- 使用SAX解析文档 --《第一行代码Android》学习笔记
- 市场or市值-Android和IOS浅谈
- android 实践项目三
- Android实践项目汇报(三)