| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
cn55
10年前发布

操作sqlite的JavaScript类

/*************************************/  /* Helman, heldes.com      */  /* helman at heldes dot com    */  /* sqlitedb.js           */  /* SQLite Database Class For HTML5 */  /*************************************/    function cDB(confs) {      var ret = {          _db : null,          _response : null,          _error : null,          check : function (tbl) {              if (!this._db)                  return false;              var _sql = '',              _sqlField = '',              _field = [];                            for (var i = 0; i < tbl.length; i++) {                  _sql = "CREATE TABLE IF NOT EXISTS " + tbl[i].table + " (";                  _field = tbl[i].properties;                  _sqlField = '';                                    for (var j = 0; j < _field.length; j++) {                      _sqlField += ',`' + _field[j].name + '` ' + _field[j].type;                  }                                    _sql += _sqlField.substr(1) + ");";                                    this.query(_sql, null, null, null);              }                            return true;          },          getResult : function () {              return this._response;          },          getError : function () {              return this._error;          },          callback_error : function (tx, _er) {              var err = '';              if (typeof(tx) == 'object') {                  for (var q in tx) {                      err += q + ' = "' + tx[q] + '"; ';                  }              } else {                  err += tx + '; ';              }              if (typeof(_er) == 'object') {                  for (var q in _er) {                      err += q + ' = "' + _er[q] + '"; ';                  }              } else if (typeof(_er) == 'undefined') {                  err += _er + '; ';              }              console.log(err);              //if(callback) callback();              return false;          },          query : function (sql, callback, params, er) {              if (!this._db)                  return false;              var self = this;              function _er(tx, __er) {                  __er = jQuery.extend(__er, {                          sql : sql                      });                  if (er)                      er(tx, __er);                  else                      self.callback_error(tx, __er);              };              this._db.transaction(function (tx) {                  tx.executeSql(sql, (params ? params : []), callback, _er);              }, _er);          },          update : function (tbl, sets, clauses, callback) {              var __sql = 'UPDATE ' + tbl,              _field = null,              __set = '',              __clause = '',              __values = [];                            for (var i = 0; i < sets.length; i++) {                  0                  _field = sets[i];                  for (var j = 0; j < _field.length; j++) {                      __set += ',`' + _field[j].name + '`=?';                      __values.push(_field[j].value);                  }              }                            for (var i = 0; i < clauses.length; i++) {                  __clause += ',`' + clauses[i].name + '`=?';                  __values.push(clauses[i].value);              }              __sql += ((__set != '') ? ' SET ' + __set.substr(1) : '') + ((__clause != '') ? ' WHERE ' + __clause.substr(1) : '') + ';';              this.query(__sql, callback, __values);              return true;          },          remove : function (tbl, clauses) {              var __sql = 'DELETE FROM ' + tbl,              __clause = '';                            for (var i = 0; i < clauses.length; i++)                  __clause += ',`' + clauses[i].name + '`="' + escape(clauses[i].value) + '"';                            __sql += ' WHERE ' + ((__clause != '') ? __clause.substr(1) : 'FALSE') + ';';                            this.query(__sql);              return true;          },          multiInsert : function (tbl, rows, callback, er) {              if (!this._db)                  return false;              var self = this;              var __sql = '',              _field = null,              __field = '',              __qs = [],              __values = [];                            this._db.transaction(function (tx) {                  for (var i = 0; i < rows.length; i++) {                      __qs = [];                      __values = [];                      __field = '';                      _field = rows[i];                                            for (var j = 0; j < _field.length; j++) {                          __field += ',`' + _field[j].name + '`';                          __qs.push('?');                          __values.push(_field[j].value);                      }                      tx.executeSql('INSERT INTO ' + tbl + ' (' + __field.substr(1) + ') VALUES(' + __qs.join(',') + ');', __values, function () {                          return false;                      }, (er ? er : self.callback_error));                  }              }, self.callback_error, function () {                  if (callback)                      callback();                  return true;              });              return true;          },          insert : function (tbl, rows, callback) {              var __sql = '',              _field = null,              __field = '',              __qs = [],              __values = [],              __debug = '';                            for (var i = 0; i < rows.length; i++) {                  __qs = [];                  __field = '';                  _field = rows[i];                                    __debug += _field[0].name + ' = ' + _field[0].value + ';';                  for (var j = 0; j < _field.length; j++) {                      __field += ',`' + _field[j].name + '`';                      __qs.push('?');                      __values.push(_field[j].value);                  }                  __sql += 'INSERT INTO ' + tbl + ' (' + __field.substr(1) + ') VALUES(' + __qs.join(',') + ');';              }              this.query(__sql, callback, __values);              return true;          },          insertReplace : function (tbl, rows, debug) {              var __sql = '',              _field = null,              __field = '',              __qs = [],              __values = [],              __debug = '';                            for (var i = 0; i < rows.length; i++) {                  __qs = [];                  __field = '';                  _field = rows[i];                                    __debug += _field[0].name + ' = ' + _field[0].value + ';';                  for (var j = 0; j < _field.length; j++) {                      __field += ',`' + _field[j].name + '`';                      __qs.push('?');                      __values.push(_field[j].value);                  }                  __sql += 'INSERT OR REPLACE INTO ' + tbl + ' (' + __field.substr(1) + ') VALUES(' + __qs.join(',') + ');';              }              this.query(__sql, null, __values);              return true;          },          dropTable : function (tbl, callback) {              var __sql = '';              if (tbl == null)                  return false;              __sql = 'DROP TABLE IF EXISTS ' + tbl;              this.query(__sql, callback);              return true;          }      }      return jQuery.extend(ret, confs);  }                                /*=======================================*/  使用方法:  /*=======================================*/    /*=======================================*/  创建数据库:  /* Create or open database with 'websiteDB' as database name and 'website DB' as title, and database site is 5MB */  /* I'm not using 1024 for the size multiplying because i don't want to be near at the margin size                          */  var db = new cDB({          _db : window.openDatabase("websiteDB", "", "website DB"; , 5 * 1000 * 1000)      });    /*=======================================*/  建表 :  /* dbTable is database structure in this example, and contains 2 tables 'foo' and 'boo' */  /* and also the table structure in table properties                                                           */  var dbTable = [{          table : 'foo',          properties : [{                  name : 'foo_id',                  type : 'INT PRIMARY KEY ASC'              }, {                  name : 'foo_field_1',                  type : ''              }, {                  name : 'foo)field_2',                  type : ''              }          ]      }, {          table : 'boo',          properties : [{                  name : 'boo_id',                  type : 'INT PRIMARY KEY ASC'              }, {                  name : 'boo_field_1',                  type : ''              }, {                  name : 'boo_field_2',                  type : ''              }          ]      }  ];    /* this line is checking if the database exist or not and then create the database structure.  */  /* table will be created if the table is not exist yet, if the table already exist, it will skip the */  /* table and continue with others tables                                                                                  */  if (!db.check(dbTable)) {      db = false;      alert('Failed to cennect to database.');  }    /*=======================================*/  删除表:  db.dropTable('foo');    /*=======================================*/  插入数据:  var row = [];  row.push([{              'name' : 'foo_id',              'value' : 1          }, {              'name' : 'foo_field_1',              'value' : 'value 1 field_1'          }, {              'name' : 'foo_field_2',              'value' : 'value 1 field_2']          }      ]);  db.insert('foo', row);    插入多行记录:  /*  SQLite is not accepting more than 1 line statement,  that is the reason why we not able to do more than one statement query, like insertion.  If you want to insert more than 1 record at the time, you need to use this function.   */  var rows = [];  rows.push([{              'name' : 'boo_id',              'value' : 1          }, {              'name' : 'boo_field_1',              'value' : 'value 1 field_1'          }, {              'name' : 'boo_field_2',              'value' : 'value 1 field_2']          }      ]);  rows.push([{              'name' : 'boo_id',              'value' : 2          }, {              'name' : 'boo_field_1',              'value' : 'value 2 field_1'          }, {              'name' : 'boo_field_2',              'value' : 'value 2 field_2']          }      ]);  db.multiInsert('boo', rows, function () {      alert('insertion done');  });    /*  如果想合并insert 和 multiInsert两个函数,可以按下面的方法增加一个判断来处理   */    if (rows.length >= 2) {      db.multiInsert('boo', rows, function () {          alert('insertion done');      });  } else {      db.insert('boo', rows);  }    /*=======================================*/  删除数据:  db.remove('boo', [{              'name' : 'boo_id',              'value' : 1          }      ])    /*=======================================*/  更新数据  db.update('boo', [[{                  'name' : 'boo_id',                  'value' : 2              }, {                  'name' : 'boo_field_1',                  'value' : 'boo value'              }          ]], ['name' : 'boo_id', 'value' : 2])    /*=======================================*/  查询  var query = 'SELECT * FROM foo';  db.query(query, function (tx, res) {      if (res.rows.length) {          alert('found ' + res.rows.length + ' record(s)');      } else {          alert('table foo is empty');      }  });