websql的使用/phonegap操作資料庫 sqlite

來源:互聯網
上載者:User

標籤:

對websql的常用操作進行了一個封裝,項目是基於phonegap的,不過phonegap預設已經整合了資料庫操作的外掛程式,所以無需再配置什麼,直接用就可以了:

/***資料庫操作輔助類,定義對象、資料操作方法都在這裡定義*/var dbname=‘mydb‘;var version=‘1.1‘;var dbdesc=‘mydb‘;var table_picture=‘be_picture‘;var dbsize=30000;var db=null;/** * 開啟資料庫 * @returns {Boolean} */function openDB(callback){try{ if (!window.openDatabase) {             console.log(‘該瀏覽器不支援資料庫‘);             return false;         } db = window.openDatabase(dbname, version, dbdesc, dbsize);return true;}catch(e){if(e==2){console.log("資料庫版本無效");}else{console.log("未知錯誤 "+e+".");}return false;}}/** * 執行一段sql * @param sql */function execSql(sql,param,callback){if(db==null){openDB();}db.transaction(function(tx) {tx.executeSql(sql,param, function(tx, result) {if(typeof(callback) == ‘function‘) {callback(true)}return true;}, function(tx, error) {if(typeof(callback) == ‘function‘) {callback(false)}console.log(error);return false;});});}var pictureFields=[   ‘id‘,   ‘app_flow_no‘,   ‘ptr_type‘,   ‘ptr_name‘,   ‘ptr_address‘,   ‘blurred‘,   ‘original‘,   ‘local_address‘  ]/** * 初始化資料庫 */function initDB(){if(db==null){openDB();}createTable(table_picture,pictureFields,{"id":"primary key","app_flow_no":"not null"});}/** * 建立資料庫 * @param tableName表名稱 * @param fields表欄位 * @param constraint約束或者欄位的其他補充,可以為空白, * 格式如:{"id":"integer primary key autoincrement","app_flow_no":"not null"} */function createTable(tableName,fields,constraint){if(db==null){openDB();}var sql = ‘CREATE TABLE IF NOT EXISTS ‘+tableName+‘ (‘;for(i in fields){var key = "";if(typeof(constraint)!="undefined" && typeof(constraint[fields[i]]) !="undefined"){key = " "+constraint[fields[i]];}sql+=fields[i]+key+",";}sql = sql.substr(0,sql.length-1);sql += ")";//log(sql);execSql(sql);}/** * 更新資料 * @param tableName表名稱 * @param setFields要更新的欄位數組 * @param setParams要更新的欄位對應的參數數組 * @param whereStrwhere語句,如果沒有可不傳,不包含where關鍵字,參數用?代替,如:id=? and name=? * @param wherParamswhere語句用到的參數數組,如[‘111‘,‘2222‘] */function updateTable(tableName,setFields,setParams,whereStr,wherParams){var sql = "update "+tableName+" set ";for(i in setFields){sql+=setFields[i]+"=?,";}sql = sql.substr(0,sql.length-1);if(typeof(whereStr)!="undefined" && typeof(wherParams)!="undefined"&& whereStr!=""){sql += " where " + whereStr;setParams = setParams.concat(wherParams);}execSql(sql,setParams);}/** * 插入資料 * @param tableName * @param insertFields * @param insertParams */function insertTable(tableName,insertFields,insertParams){var sql = "insert into "+tableName+" (";var sql2 = " values(";for(i in insertFields){sql+=insertFields[i]+",";sql2 +="?,"}sql = sql.substr(0,sql.length-1);sql2 = sql2.substr(0,sql2.length-1);sql += ")";sql2 +=  ")";execSql(sql+sql2,insertParams);}/** * 刪除資料 * @param tableName * @param whereStr * @param wherParams */function deleteRow(tableName,whereStr,wherParams){var sql = "delete from "+tableName;if(typeof(whereStr)!="undefined" && typeof(wherParams)!="undefined"&& whereStr!=""){sql += " where " + whereStr;}execSql(sql,wherParams);}/** * 查詢 * @param tableName * @param selectFieldsselect的欄位,用逗號分開,如果全部傳"*" * @param whereStrwhere語句,參數用?代替 * @param wherParams參數數組 * @callback 必填,返回的對象會放在callback函數作為參數傳遞 */function select(tableName,selectFields,whereStr,wherParams,callback){if(db==null){openDB();}var sql = "SELECT "+selectFields+" FROM "+tableName;if(typeof(whereStr)!="undefined" && typeof(wherParams)!="undefined"&& whereStr!=""){sql += " where " + whereStr;} db.transaction(function(tx){          tx.executeSql(sql,wherParams,function(tx,results){          if(results.rows.length<1){          if (typeof(callback) == ‘function‘) {callback(false)} //沒有資料          }else{                if(typeof(callback) == ‘function‘) {callback(results.rows)}          }          },function(tx,error){              return false;          });      });}/** * 插入或更新 * @param tableName * @param insertFields * @param insertParams * @param key根據該key來判斷是否有資料 * @param keyVal */function saveOrUpdate(tableName,insertFields,insertParams,key,keyVal){if(typeof(key)!="undefined" && typeof(keyVal)!="undefined"&& key!=""){select(tableName,insertFields[0],key+"=?",[keyVal],function(rows){if(rows){updateTable(tableName,insertFields,insertParams,key+"=?",[keyVal]);}else{insertFields.push(key);insertParams.push(keyVal);insertTable(tableName,insertFields,insertParams);}})}else{insertTable(tableName,insertFields,insertParams);}}

 查詢:

select(table_picture,"*","id=?",[id],function(rows){if(rows){//如果查詢到資料}})

 

注意:因為websql是非同步執行的,要擷取到返回的結果然後進一步操作,需要傳入回呼函數,如上面的function(rows)....

插入或者更新:

saveOrUpdate(table_picture,[‘id‘,‘app_flow_no‘,‘original‘,‘ptr_type‘,‘ptr_name‘],[pic.id,pic.appFlowNo,pic.original,pic.ptrType,pic.ptrName],‘id‘,pic.id);

 刪除:

deleteRow(table_picture,"id=?",[123])

 轉自:http://blog.csdn.net/linshutao/article/details/21398483

websql的使用/phonegap操作資料庫 sqlite

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.