`

一个SQLite操作类(JS)

 
阅读更多

源码:

/*************************************/
/* 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');
    }
});
 
分享到:
评论
1 楼 sxm2017 2013-06-29  
有完整的例子吗

相关推荐

    javascript封装的sqlite操作类实例

    首先定义了一个包含多条创建表SQL语句的数组`tbs`,然后创建了一个SQLite操作类的实例`db`,并调用`query`方法执行插入和查询操作。例如,在插入操作中使用占位符`?`来防止SQL注入,并在查询操作中,通过回调函数...

    Nodejs操作Sqlite3数据库封装

    在Node.js环境中,SQLite3是一个常用的轻量级数据库,它不需要单独的服务进程,可以直接在内存中或磁盘上创建数据库文件。本篇文章将深入探讨如何使用`node-sqlite3`库来操作SQLite3数据库,并对其进行封装,以便于...

    js+html5操作sqlite数据库的方法.docx

    在本文中,我们将使用 JavaScript 封装一个 HTML5 操作 SQLite 数据库的类,称为 `lanxDB`。该类提供了对 SQLite 数据库的基本操作,包括创建表、插入数据、切换表等。 lanxDB 类的方法 getDBName 方法 `...

    html5+js 读写sqlite增删改查

    通过JavaScript,我们可以创建一个SQLite数据库,定义表结构,并执行SQL语句。 1. **创建数据库**: 使用`openDatabase`函数创建数据库。例如: ```javascript var db = openDatabase("MyDB", "1.0", "Demo DB",...

    js-sqlite.js

    * 数据库操作类 * @param database 数据库名 * @param tableName 表名 * @param priKey 表主键 */ /** * 将数组或对象转成字符串信息用于在控制台显示 * console.log(displayProp(obj)); */ function ...

    SqliteORM,一个很好的Sqlite ORM框架

    Sqlite ORM 是一个简单的C#类,对Sqlite的操作进行了封装,主要功能包括:表定义、生成,访问,更新等,其中,支持,多表的连接操作,语法类似Linq语法,使用非常方便,附加了使用说明文档。 例如,添加记录操作为...

    小工具框架,electron+sqlite

    "小工具框架,electron+sqlite" 是一个基于 Electron 和 SQLite 的应用程序开发框架,它结合了桌面应用的强大功能和数据库管理的便利性。Electron 是一个用于构建跨平台桌面应用程序的开源框架,它允许开发者使用 ...

    SQLite 增删改查的工具类

    在`android_sqlite_demo1`这个项目中,你可以找到一个完整的示例,包含了如何在Android应用程序中使用这个工具类进行数据操作。通过运行这个示例,你可以更直观地了解这些方法如何与UI交互,以及如何处理数据库事务...

    js+html5操作sqlite数据库的方法

    SQLite是一个轻量级的、嵌入式的关系型数据库,适用于客户端存储数据。本文将深入探讨如何使用JavaScript封装HTML5操作SQLite数据库的类,并提供具体使用技巧。 首先,我们需要了解Web SQL API的基本用法。`open...

    SQLite4Unity3d

    以下是一些关键的SQLite操作示例: 1. **打开数据库**: ```csharp string dbPath = Application.dataPath + "/Resources/MyDatabase.db"; SQLiteConnection conn = new SQLiteConnection(dbPath); conn.Open()...

    Air Flex Sqlite通信

    在IT行业中,Adobe AIR(Adobe Integrated Runtime)是一个跨平台的应用程序运行环境,允许开发者使用Flash、Flex、HTML和JavaScript等技术构建桌面应用程序。本示例着重于“Air Flex Sqlite通信”,即如何在Adobe ...

    Flask+sqlite实现学生信息管理系统

    本资源利用Flask和SQLite数据库创建了一个学生信息管理系统,非常适合初学者进行实践和学习。 首先,让我们详细了解Flask。Flask是一个基于Werkzeug WSGI工具箱和Jinja2模板引擎的微框架。它的“微”意味着核心非常...

    Android Sqlite使用Deno

    在Android中,Deno可以作为一个库引入,帮助开发者更方便地处理SQLite操作。Deno提供了更简洁的API和异步处理能力,使得与数据库的交互更加直观。例如,你可以使用Deno的SQLite库(如`deno-sqlite`)编写如下的代码...

    数据库文件为sqlite的web项目

    【jQuery】是一个JavaScript库,极大地简化了JavaScript编程,特别是在DOM操作、事件处理和Ajax交互方面。在Web项目中,jQuery通常用于动态更新页面内容,实现用户友好的交互效果,如表格排序、下拉菜单、弹出框等。...

    Python-使用Flask和sqlite3编写的项目目录应用程序

    在Python的Web开发领域,Flask是一个轻量级的Web应用框架,而sqlite3则是Python标准库中的一个模块,用于处理嵌入式SQL数据库。这个名为“Python-使用Flask和sqlite3编写的项目目录应用程序”的项目,显然是利用这...

    uniapp+sqlite(物资管理APP)源码

    uni-app是一个由ECharts团队开发的跨平台前端框架,它允许开发者使用Vue.js语法编写一次代码,然后可以发布到iOS、Android、H5、小程序等多个平台。uni-app提供了丰富的组件和API,使得开发移动应用变得简单高效。 ...

    asp.net mvc4 +sqlite

    ASP.NET MVC4与SQLite是一个强大的组合,用于构建高效、轻量级的Web应用程序。ASP.NET MVC4是一个基于模型-视图-控制器(MVC)设计模式的开源框架,它允许开发者构建可维护、可测试的Web应用。SQLite则是一个便携式...

    SQLiteStudio数据库包

    SQLiteStudio是一款功能强大的SQLite数据库管理工具,它提供了一个直观的用户界面,使得数据库操作变得简单易行。这个压缩包文件包含了一系列与SQLiteStudio运行相关的组件和库文件,这些文件对于理解SQLite数据库...

    sqlite_Overprint.zip

    在"sqlite_Overprint"这个入门级的demo中,你可能会找到以上步骤的具体实现,包括数据库操作类的设计、WinForm控件与数据库的绑定以及Web服务接口的编写。这些示例代码可以帮助初学者快速理解如何在C#环境中有效利用...

Global site tag (gtag.js) - Google Analytics