[转]html5 js 访问 sqlite 数据库的操作类
本文转自:http://blog.csdn.net/tsxw24/article/details/7613815
webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使用起来很不方便 故而做这个js封装,以方便使用
参考文章:
sqlite API 说明
另外的操作类
sqlite 语法
http://blog.csdn.net/ejzhang/article/details/6224915
- /**
- * js 操作数据库类
- *
- * @author 肖武<phpxiaowu@gmail.com>
- */
- /**
- * 1、数据库名(mydb)
- 2、版本号(1.0)
- 3、描述(Test DB)
- 4、数据库大小(2*1024*1024)
- */
- var DB = function( db_name, size ){
- var _db = openDatabase(db_name, '1.0.0','', size );
- return {
- /**
- * 执行sql,回调返回影响条数
- */
- execute:function( sql, param, callback ) {
- //参数处理
- if( !param ){
- param = [];
- }else if(typeof param == 'function' ){
- callback = param;
- param = [];
- }
- this.query( sql, param, function(result){
- if( typeof callback == 'function' ){
- callback(result.rowsAffected);
- }
- });
- },
- /**
- * 执行sql,回调返回sql查询对象
- * 查询时,有数据返回数组,无数据返回0
- * 增删改时:返回int,影响条数
- * void query( string[, function])
- * void query( string[, array[, function]])
- */
- query:function(sql, param, callback){
- //参数处理
- if( !param ){
- param = [];
- }else if(typeof param == 'function' ){
- callback = param;
- param = [];
- }
- var self=this;
- //只有一个参数
- _db.transaction(function (tx) {
- //4个参数:sql,替换sql中问号的数组,成功回调,出错回调
- tx.executeSql(sql,param,function(tx,result){
- if (typeof callback == 'function' ){
- callback(result);
- }
- },self.onfail) ;
- })
- },
- /**
- * 插入,回调返回last id
- * void insert( string, object[, function])
- */
- insert:function( table, data, callback ){
- if( typeof data != 'object' && typeof callback == 'function' ){
- callback(0);
- }
- var k=[];
- var v=[];
- var param=[];
- for(var i in data ){
- k.push(i);
- v.push('?');
- param.push(data[i]);
- }
- var sql="INSERT INTO "+table+"("+k.join(',')+")VALUES("+v.join(',')+")";
- this.query(sql, param, function(result){
- if ( typeof callback == 'function' ){
- callback(result.insertId);
- }
- });
- },
- /**
- * 修改,回调返回影响条数
- * void update( string, object[, string[, function]])
- * void update( string, object[, string[, array[, function]]])
- */
- update:function( table, data, where, param, callback ){
- //参数处理
- if( !param ){
- param = [];
- }else if(typeof param == 'function' ){
- callback = param;
- param = [];
- }
- var set_info = this.mkWhere(data);
- for(var i=set_info.param.length-1;i>=0; i--){
- param.unshift(set_info.param[i]);
- }
- var sql = "UPDATE "+table+" SET "+set_info.sql;
- if( where ){
- sql += " WHERE "+where;
- }
- this.query(sql, param, function(result){
- if( typeof callback == 'function' ){
- callback(result.rowsAffected);
- }
- });
- },
- /**
- * 删除
- * void toDelete( string, string[, function]])
- * void toDelete( string, string[, array[, function]])
- */
- toDelete:function( table, where, param, callback ){
- //参数处理
- if( !param ){
- param = [];
- }else if(typeof param == 'function' ){
- callback = param;
- param = [];
- }
- var sql = "DELETE FROM "+table+" WHERE "+where;
- this.query(sql, param, function(result){
- if( typeof callback == 'function' ){
- callback(result.rowsAffected);
- }
- });
- },
- /**
- * 查询,回调返回结果集数组
- * void fetch_all( string[, function] )
- * void fetch_all( string[, param[, function]] )
- */
- fetchAll:function( sql, param, callback ){
- //参数处理
- if( !param ){
- param = [];
- }else if(typeof param == 'function' ){
- callback = param;
- param = [];
- }
- this.query( sql, param, function(result){
- if (typeof callback == 'function' ){
- var out=[];
- if (result.rows.length){
- for (var i=0;i<result.rows.length;i++){
- out.push(result.rows.item(i));
- }
- }
- callback(out);
- }
- });
- },
- /**
- * 查询表的信息
- * table_name: 表名称,支持 % *,
- */
- showTables:function( table_name, callback){
- this.fetchAll("select * from sqlite_master where type='table' and name like ?", [table_name], callback);
- },
- /**
- * 组装查询条件
- */
- mkWhere:function(data){
- var arr=[];
- var param=[];
- if( typeof data === 'object' ){
- for (var i in data){
- arr.push(i+"=?");
- param.push(data[i]);
- console.log('data.i:'+i);
- }
- }
- return {sql:arr.join(' AND '),param:param};
- },
- /**
- * 错误处理
- */
- onfail:function(tx,e){
- console.log('sql error: '+e.message);
- }
- }
- }
- /*
- //使用示例:
- //1.获取db对象,连接数据库 test,分配2M大小
- var db = new DB('test',1024*1024*2);
- //2.创建表
- d.query("CREATE TABLE ids (id integer primary key autoincrement , ctime integer)");
- //3.查看已经创建的表,支持表名通配符搜索。如:"%"查询所有表,"user_%"查询"user_"开头的表
- db.showTables("%",function(ret){console.log(ret)})
- //4.查询表里数据
- db.fetchAll('select * from ids',function(ret){console.log(ret)});
- //5.修改
- db.update('ids',{ctime:123},"id=?",[1],function(ret){console.log(ret)});
- //6.删除
- db.toDelete('ids',"id=?",[1],function(ret){console.log(ret)});
- //7.其它,如删表
- db.query('drop table ids');
- */
[转]html5 js 访问 sqlite 数据库的操作类的更多相关文章
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- 【Android】13.2 使用自定义的CursorAdapter访问SQLite数据库
分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 SQliteDemo1的例子演示了SimpleCursorAdapter的用法,本节我们将使用用途更广的自定义的游 ...
- 【Android】13.1 用Android自带的API访问SQLite数据库
分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 这一节我们先来看看如何直接用Android自带的API创建和访问SQLite数据库. 1.创建SQLite数据库 ...
- 【Android】13.0 第13章 创建和访问SQLite数据库—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 Android 内置了三种数据存取方式:SQLite数据库.文件.SharedPreferences. 这一章我们 ...
- 并发访问sqlite数据库出现databse is locked的错误的一个解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101 在并发访问sqlite数据库会出现这样一个错误:databseis locked,这是sqlite数据库对并发支持不太 ...
- 使用iOS原生sqlite3框架对sqlite数据库进行操作
摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...
- 【C#】使用EF访问Sqlite数据库
原文:[C#]使用EF访问Sqlite数据库 1. 先上Nuget下载对应的包 如图,搜索System.Data.SQLite下载安装即可,下载完之后带上依赖一共有这么几个: EntityFramew ...
- 以EntifyFramework DBFirst方式访问SQLite数据库
前面一直在找EF Code First方式来访问SQLite数据库,后面得出的结论是SQLite不支持 Code First, 虽然有非官方的库SQLite.CodeFirst可以使用,但一直没搞成功 ...
- Qt5 开发 iOS 应用之访问 SQLite 数据库
开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...
随机推荐
- jQuery+fullPage.js演示10种全屏滚动
基本演示 背景演示 循环演示 回调函数演示 绑定菜单演示 项目导航演示 自动滚动 slide自动滚动 响应式 下载地址 实例代码 <!DOCTYPE html> <html lang ...
- 8种效果实例-jQuery anoSlide 焦点图轮播
anoslide是一款可调节效果至任意宽度大小,支持图文混合内容显示的图片轮播插件. 在线实例 单个 多个 动画延迟 自动播放 显示分页 显示标题 延迟加载 自适应高度 使用方法 <div cl ...
- Tomcat如何设置网站的默认首页
在Tomcat安装完成后, 在其安装目录下会有一个config文件夹, 打开其中的server.xml文件, 找到相应的directory字段, 设置默认的文件, 重启服务器即可.
- 2034-人见人爱A-B(c++实现)
Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法 ...
- CSS常用样式(二)
一.边框样式 1.border:复合属性.设置对象边框的特性. 取值: border-width: 设置或检索对象边框宽度. border-style: 设置或检索对象边框样式. border-col ...
- HTTPS学习总结
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 21.0px Verdana; color: #393939 } span.s1 { } HTTPS学习总结 ...
- Android MediaPlayer的生命周期
MediaPlayer的状态转换图也表征了它的生命周期,如下: 这张状态转换图清晰的描述了MediaPlayer的各个状态,也列举了主要的方法的调用时序,每种方法只能在一些特定的状态下使用,如果使用时 ...
- Layout--iOS
// 系统的约束代码 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIView *superVi ...
- UIWindow 实现遮盖导航条的蒙版
使用代码构建应用的主界面 我们先来介绍一下,如何使用代码来构建项目的主界面,以及主界面的一般架构方式 概述 刚创建的 iOS 项目默认是使用 Main.storeboard 作为项目的主界面的 若你不 ...
- Android Build Error(1)
Type 1 —— Build Path Problem : **.jar包文件缺失 1.在Android项目根目录下新建一个libs文件夹: 2.把你需要的导入的第三方Jar包复制进这个目录: 3. ...