相关疑难解决方法(0)

更好的SQLite损坏检测

首先,一些背景:

我的Android应用程序有DB表,有很多四列行.它向服务器发送请求,服务器仅在所有这四个值都"有效"时才响应.数千名用户中的一些人报告说某些东西对他们不起作用(因为他们一段时间没有从服务器获得结果) - 我试图找出导致问题的原因,结果证明唯一可能的原因是未检测到的数据库损坏.

在ACRA日志中,我收到了一些带有SQL错误的消息,但这些消息是由于应用程序因为损坏而无法打开文件.这给了我一些线索,但我仍然不相信这是问题所在.所以,我创建了一个非常简单的Python脚本,它改变了DB文件中的随机字节,并检查SQLite将如何处理:

import random
import array
import sqlite3

db = array.array('B')
db.fromstring(open('db').read())

ta =  [x for x in sqlite3.connect('db').execute('SELECT * FROM table ORDER BY _id')]

results = [0,0,0,0]
tries = 1000

for i in xrange(0,tries):
    work = db[:]
    while work == db: 
        for j in xrange(0,random.randint(1,5)):
            work[random.randint(1,len(db))-1] = random.randint(0,255)

    work.tofile(open('outdb','w'))

    try:
        c = sqlite3.connect('outdb')
        results[0] += 1

        for r in c.execute('PRAGMA integrity_check;'):
        results[1] += 1 if (r[0] == 'ok') else 0 
    except:
        continue    

    try:
        results[3] …
Run Code Online (Sandbox Code Playgroud)

java sqlite android corrupt integrity

6
推荐指数
1
解决办法
1513
查看次数

标签 统计

android ×1

corrupt ×1

integrity ×1

java ×1

sqlite ×1