最近做一个项目,数据逻辑比较复杂, 我建了一些表,然后写了些接口给同事调用, 关于数据逻辑在提供的接口里完成, 实现过程中需要解决这样的问题:

  1. 需要很多情形的数据,数据本身存在逻辑关系。
  2. 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 sqlite3con = 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

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android——实现全国省市区地区选择
  3. android v4l2 摄像头 ,不基于camera框架
  4. Android(安卓)实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlay
  5. Android实践——密码本SecretBook
  6. android上传图片并附带上传数据,文件流
  7. [置顶] Android即时通信软件设计(一)(网络通信)
  8. [置顶] 【Android】ListView、RecyclerView、ScrollView里嵌套Li
  9. Serializable 都这么牛逼了,Parcelable 还要你何用?

随机推荐

  1. 物理网卡故障,怎么办?
  2. 2020.2.22 每日小结
  3. 类成员重载-全局成员-命名空间声明访问分
  4. zabbix安装
  5. Netdata 新一代实时监控系统(4)
  6. 接口联动
  7. 接口的基本属性
  8. 面试被问离职原因该怎么回答?
  9. 服务器Web性能测试主要包含四个方面详解
  10. 2021软件测试发展的15种趋势,别怪我没告诉