z***@gmail.com
z***@gmail.com
  • 发布:2018-04-17 13:33
  • 更新:2018-04-17 13:33
  • 阅读:1560

离线打包IOS app,websql存储的记录数据一段时间后消失

分类:MUI

项目中用到了websql记录转账记录数据。本地离线打包IOS app,运行app产生了一部分websql记录数据。过了一段时间后这些记录查询不到了。

另外项目中使用了localStorage也出现了记录的数据丢失的情况,改用plus.storage后暂时没出现记录丢失的情况。

var DB_NAME = "wallet.db";  
var DB_VERSION = "1.0";  
var DB_DISPLAY_NAME = "wallet";  
var DB_SIZE = 30*1024*1024;  

var TRANSACTION_TABLE = "CREATE TABLE IF NOT EXISTS transactions (id integer primary key autoincrement,txhash,blockHash,blockNumber,from_address,to_address,value,gas,gasPrice,input_data,remarks,timestamp);";  
var TRANSACTION_ERC20_TABLE = "CREATE TABLE IF NOT EXISTS erc20_transactions (id integer primary key autoincrement,txhash,blockHash,blockNumber,contract_address,from_address,to_address,value,gas,gasPrice,input_data,remarks,timestamp);";  
var dbobject  = function(){};  
dbobject.prototype = {  
    db:null,  
    getCurrentDB:function(){  
        if(!this.db){  
            this.db = openDatabase(DB_NAME,DB_VERSION,DB_DISPLAY_NAME,DB_SIZE);  
            console.log("Connect db success!")  
        }  
        return this.db;  
    },  
    initDB:function(callback){  
        //初始化数据库  
        var db = this.getCurrentDB();  
        console.log(TRANSACTION_TABLE);  
        db.transaction(function (context) {  
            context.executeSql(TRANSACTION_TABLE,[],function(context, results){  
                console.log("Create TABLE `transactions` success!");  
                if(callback){  
                    callback();  
                }  
            },);  
            context.executeSql(TRANSACTION_ERC20_TABLE,[],function(context, results){  
                console.log("Create TABLE `erc20_transactions` success!");  
                if(callback){  
                    callback();  
                }  
            },);  
        });  
    },  
    insertTransaction:function(kw,insert_callback){  
        //txhash,blockHash,blockNumber,from_address,to_address,values,gas,gasPrice,input_data,remarks,timestamp  
        //var timestamp = new Date().getTime();  
        //插入一条记录  
        var db = this.getCurrentDB();  
        var key_list = [];  
        var execute_args = [];  
        var mark_list = []  
        for(k in kw){  
            key_list.push(k);  
            execute_args.push(kw[k]);  
            mark_list.push("?");  
        }  

        var sql = "INSERT INTO transactions ("+key_list.join()+") values ("+mark_list.join()+");";  
        console.log("db",db);  
        db.transaction(function (context) {  
            context.executeSql(sql,execute_args,function(context, results){  
                console.log("insert transaction success!");  
                if(typeof insert_callback === "function"){  
                    var err = null;  
                    insert_callback(err);  
                }  
            },function(transaction,err){  
                console.log("err",err.message);  
                if(typeof insert_callback === "function"){  
                    insert_callback(err);  
                }  
            });  
        });  
    },  
    insertErc20Transaction:function(kw,insert_callback){  
        //txhash,blockHash,blockNumber,contract_address,from_address,to_address,values,gas,gasPrice,input_data,remarks,timestamp  
        //var timestamp = new Date().getTime();  
        //插入一条Erc20记录  
        var db = this.getCurrentDB();  
        var key_list = [];  
        var execute_args = [];  
        var mark_list = []  
        for(k in kw){  
            key_list.push(k);  
            execute_args.push(kw[k]);  
            mark_list.push("?");  
        }  

        var sql = "INSERT INTO erc20_transactions ("+key_list.join()+") values ("+mark_list.join()+");";  
        db.transaction(function (context) {  
            context.executeSql(sql,execute_args,function(context, results){  
                console.log("insert erc20_transaction success!");  
                if(typeof insert_callback === "function"){  
                    var err = null;  
                    insert_callback(err);  
                }  
            },function(transaction,err){  
                console.log("insert erc20 err",err.message);  
                if(typeof insert_callback === "function"){  
                    insert_callback(err);  
                }  
            });  
        });  
    },  
    getTransactions:function(account,callback,tag_stamp=0,direction=1,limit=20){  
        //查询用户所有交易记录  
        //tag_id 起始ID  
        //direction 方向 1 从tag_stamp 开始向后查(>tag_stamp) 2 从tag_stamp 开始向前查(<tag_stamp)  
        console.log("call args :",tag_stamp)  
        var db = this.getCurrentDB();  
        var account = account.toLocaleString().toLowerCase();  
        var sql;  
        if(direction==1){  
            sql = "SELECT * from transactions where (from_address like ? or to_address like ?) and timestamp>? order by timestamp desc limit ?;"  
        }else{  
            sql = "SELECT * from transactions where (from_address like ? or to_address like ?) and timestamp<? order by timestamp desc limit ?;"  
        }  
        var execute_args = [account,account,tag_stamp,limit];  
        var transactions = [];  
        db.transaction(function (context) {  
            context.executeSql(sql,execute_args,function(context, results){  
                console.log("sql",sql);  
                console.log("execute_args",execute_args);  
                console.log("get transaction success!");  
                var len = results.rows.length, i;  
                for (i = 0; i < len; i++){  
                    transactions.push(results.rows.item(i));  
                }  
                callback(transactions);  
            });  
        });  
    },  
    getErc20Transactions:function(contract_address,account,callback,tag_stamp=0,direction=1,limit=20){  
        //查询用户所有ERC20交易记录  
        //tag_id 起始ID  
        //direction 方向 1 从tag_stamp 开始向后查(>tag_id) 2 从tag_stamp 开始向前查(<tag_stamp)  
        var db = this.getCurrentDB();  
        var account = account.toLocaleString().toLowerCase();  
        var sql;  
        if(direction==1){  
            sql = "SELECT * from erc20_transactions where (from_address like ? or to_address like ?) and contract_address like ? and timestamp>? order by timestamp desc limit ?;"  
        }else{  
            sql = "SELECT * from erc20_transactions where (from_address like ? or to_address like ?) and contract_address like ? and timestamp<? order by timestamp desc limit ?;"  
        }  
        var execute_args = [account,account,contract_address,tag_stamp,limit];  
        console.log("get erc20_transaction sql:",sql);  
        var transactions = [];  
        db.transaction(function (context) {  
            context.executeSql(sql,execute_args,function(context, results){  
                console.log("get erc20_transaction success!");  
                var len = results.rows.length, i;  
                for (i = 0; i < len; i++){  
                    transactions.push(results.rows.item(i));  
                }  
                callback(transactions);  
            });  
        });  
    }  

}
2018-04-17 13:33 负责人:无 分享
已邀请:

该问题目前已经被锁定, 无法添加新回复