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); });