ionic项目需要做本地缓存,研究了一番,总结出了常用的数据库操作:
1、新建数据库,用angularJS+ionic:
//声明一个数据库对象 var db = null; //事件deviceready就绪后创建数据库 document.addEventListener('deviceready', function() { db = window.sqlitePlugin.openDatabase({name: 'demo.db', location: 'default'}); });
2、用标准事务API 来布库
//在一个事务中执行建表插入等sql语句的 db.transaction(function(tx) { //建表 tx.executeSql('CREATE TABLE IF NOT EXISTS DemoTable (name, score)'); //插入操作 tx.executeSql('INSERT INTO DemoTable VALUES (?,?)', ['Alice', 101]); tx.executeSql('INSERT INTO DemoTable VALUES (?,?)', ['Betty', 202]); }, function(error) {//失败回调 console.log('Transaction ERROR: ' + error.message); }, function() {//成功回调 console.log('Populated database OK'); });
3、可以检测或查看数据的事务操作
db.transaction(function(tx) { tx.executeSql('SELECT count(*) AS mycount FROM DemoTable', [], function(tx, rs) {//操作成功的回调函数里面 有 tx 参数和 rs 参数 //可以打印查询成功的信息 console.log('Record count (expected to be 2): ' + rs.rows.item(0).mycount); }, function(tx, error) { //打印查询失败的信息 console.log('SELECT error: ' + error.message); }); });
4、这比较叼,SQL 批处理。用来初始化有大量数据的数据库比较实用
db.sqlBatch([ 'CREATE TABLE IF NOT EXISTS DemoTable (name, score)', [ 'INSERT INTO DemoTable VALUES (?,?)', ['Alice', 101] ], [ 'INSERT INTO DemoTable VALUES (?,?)', ['Betty', 202] ], ], function() { console.log('Populated database OK'); }, function(error) { console.log('SQL batch ERROR: ' + error.message); });
如果对一个表执行多次操作可以用以下方法,用到jquery的方法
var resultJSON = {/*json数据,待插入数据*/}; var ph = '';//空字符,用于拼接 var data = [];//待插入数据容器 //拼接好sql字符串 填装好数据 $each(resultJSON.user, function (index, element) { data.push(element.obj1); data.push(element.status = 0); if (index !== 0) { ph += ','}; ph += '(?,?)'; }); //执行操作 db.sqlBatch([ ['INSERT INTO tableName(obj1,status) VALUES ' + ph, data]; ]);
5、要查看数据就在 操作成功的回调函数加一个res参数,打印log.当然你可以用这种方法返回查询结果
db.executeSql('SELECT count(*) AS mycount FROM DemoTable', [], function(rs) { console.log('Record count (expected to be 2): ' + rs.rows.item(0).mycount); }, function(error) { console.log('SELECT SQL statement ERROR: ' + error.message); });