项目中用到了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);
});
});
}
}
0 个回复