- 浏览: 1621499 次
- 性别:
- 来自: 厦门
-
文章分类
- 全部博客 (603)
- T_java (145)
- T_script&ASP (51)
- T_C/C++ (25)
- T_PowerBuilder (11)
- T_Database (53)
- T_odoo (7)
- T_应用服务器 (50)
- T_专_条形码 (6)
- T_专_负载均衡器 (4)
- T_操作系统 (94)
- T_信息安全 (41)
- T_专_搜索引擎 (14)
- T_L_PHP (58)
- T_L_Delphi (18)
- T_L_.NET、C#、VisualStudio (25)
- T_L_Objective-C (6)
- T_移动开发 (53)
- T_网络 (109)
- T_大数据 (2)
- T_嵌入式 (2)
- T_小众技术 (24)
- T_未分类 (58)
- L_旅游印记 (1)
- L_生活随笔 (48)
- L_中国文化 (18)
- L_户外与生存 (0)
最新评论
-
csbean4004:
不知道哪传来得恶习,发帖子不好好发,故意弄错一些东西,很讨厌
让HTML5支持后置摄像头 -
withthewind:
终于找到一个可以用的了。。。
如何用VBA取得Word文档中的标题前面的序号 -
busbby:
兄弟,无法下载,说文件不完整
一个好用的Outlook ost格式文件转pst文件的工具 -
yijavakevin:
密码啊~解压密码多少?
一个二维条形码组件 -
vipbooks:
你给的那个链接根本无法下载,跳到官网看了下最新版12M,但点下 ...
十步以内完成精细web打印
源码:
/*************************************/ /* 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'); } });
发表评论
-
一句话实现五星评分显示
2018-06-05 08:31 1013Python: rate = 1 #rate 取值 ... -
来算google的可视化编程工具——Blockly,不仅仅是玩具
2017-10-16 21:34 33277Blockly - 来自Google的可 ... -
十步以内完成精细web打印
2017-06-21 11:44 7630注意: 康虎云报表组 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6729注意: 康虎云报表 ... -
让ie6 7 8 9支持html5 websocket
2016-12-23 20:52 2356结果: 从github上的 web ... -
让HTML5支持后置摄像头
2016-12-22 15:44 2450让HTML5支持后置摄像头: <!DOCTYPE h ... -
如何让三列div中间那个自适应宽度
2016-12-03 18:46 738效果如图: 直接上代码,具体看注释: < ... -
网站获取用户手机号码的方法、系统、客户端及服务器(坑爹的玩意儿)
2016-11-22 14:22 2317网站获取用户 ... -
Windown下最简安装nodejs和npm
2016-06-20 21:03 698Windown下最简安装nodejs和npm 一、下 ... -
快速提高Android开发效率的Web工具
2016-01-24 10:47 770快速提高Android开发效率的Web工具 在Goog ... -
一个提供大量数据模型的网站
2015-12-17 14:00 1012网站地址是:http://www.databaseansw ... -
通过 HTTP 头进行 SQL 注入(转)
2015-12-11 10:10 3285在漏洞评估和渗透测试中,确定目标应用程序的输入向量是 ... -
Node.js下载地址
2015-11-19 14:16 758http://nodejs.org/dist/ -
推荐一个Chrome扩展,Ripple Emulator
2015-09-02 16:05 909推荐一个Chrome扩展,Ripple Emulator。 ... -
如何给你的Android 安装文件(APK)瘦身
2015-08-18 13:18 989文章目录 APK 文件 ... -
移动前端头部标签(HTML5 head meta)
2015-08-18 13:07 869移动前端开发中添加一些webkit专属的HTML5头部标签 ... -
移动混合应用Hybrid App开发实战 (转)
2014-12-18 09:58 0移动混合应用Hybrid App开发实战 ... -
关于Node.js语言的讨论(转)
2014-11-13 13:17 763本文是从 Node on nails! 这 ... -
Node.js的一些缺点分析(转)
2014-11-13 13:05 1105身为重度Node.js用户,我也来说说我的理解吧。 计算机语 ... -
手机网站在线测试工具
2014-10-27 10:30 0手机网站在线测试工具: http://www.res ...
相关推荐
首先定义了一个包含多条创建表SQL语句的数组`tbs`,然后创建了一个SQLite操作类的实例`db`,并调用`query`方法执行插入和查询操作。例如,在插入操作中使用占位符`?`来防止SQL注入,并在查询操作中,通过回调函数...
在Node.js环境中,SQLite3是一个常用的轻量级数据库,它不需要单独的服务进程,可以直接在内存中或磁盘上创建数据库文件。本篇文章将深入探讨如何使用`node-sqlite3`库来操作SQLite3数据库,并对其进行封装,以便于...
在本文中,我们将使用 JavaScript 封装一个 HTML5 操作 SQLite 数据库的类,称为 `lanxDB`。该类提供了对 SQLite 数据库的基本操作,包括创建表、插入数据、切换表等。 lanxDB 类的方法 getDBName 方法 `...
通过JavaScript,我们可以创建一个SQLite数据库,定义表结构,并执行SQL语句。 1. **创建数据库**: 使用`openDatabase`函数创建数据库。例如: ```javascript var db = openDatabase("MyDB", "1.0", "Demo DB",...
* 数据库操作类 * @param database 数据库名 * @param tableName 表名 * @param priKey 表主键 */ /** * 将数组或对象转成字符串信息用于在控制台显示 * console.log(displayProp(obj)); */ function ...
Sqlite ORM 是一个简单的C#类,对Sqlite的操作进行了封装,主要功能包括:表定义、生成,访问,更新等,其中,支持,多表的连接操作,语法类似Linq语法,使用非常方便,附加了使用说明文档。 例如,添加记录操作为...
"小工具框架,electron+sqlite" 是一个基于 Electron 和 SQLite 的应用程序开发框架,它结合了桌面应用的强大功能和数据库管理的便利性。Electron 是一个用于构建跨平台桌面应用程序的开源框架,它允许开发者使用 ...
在`android_sqlite_demo1`这个项目中,你可以找到一个完整的示例,包含了如何在Android应用程序中使用这个工具类进行数据操作。通过运行这个示例,你可以更直观地了解这些方法如何与UI交互,以及如何处理数据库事务...
SQLite是一个轻量级的、嵌入式的关系型数据库,适用于客户端存储数据。本文将深入探讨如何使用JavaScript封装HTML5操作SQLite数据库的类,并提供具体使用技巧。 首先,我们需要了解Web SQL API的基本用法。`open...
以下是一些关键的SQLite操作示例: 1. **打开数据库**: ```csharp string dbPath = Application.dataPath + "/Resources/MyDatabase.db"; SQLiteConnection conn = new SQLiteConnection(dbPath); conn.Open()...
在IT行业中,Adobe AIR(Adobe Integrated Runtime)是一个跨平台的应用程序运行环境,允许开发者使用Flash、Flex、HTML和JavaScript等技术构建桌面应用程序。本示例着重于“Air Flex Sqlite通信”,即如何在Adobe ...
本资源利用Flask和SQLite数据库创建了一个学生信息管理系统,非常适合初学者进行实践和学习。 首先,让我们详细了解Flask。Flask是一个基于Werkzeug WSGI工具箱和Jinja2模板引擎的微框架。它的“微”意味着核心非常...
在Android中,Deno可以作为一个库引入,帮助开发者更方便地处理SQLite操作。Deno提供了更简洁的API和异步处理能力,使得与数据库的交互更加直观。例如,你可以使用Deno的SQLite库(如`deno-sqlite`)编写如下的代码...
【jQuery】是一个JavaScript库,极大地简化了JavaScript编程,特别是在DOM操作、事件处理和Ajax交互方面。在Web项目中,jQuery通常用于动态更新页面内容,实现用户友好的交互效果,如表格排序、下拉菜单、弹出框等。...
在Python的Web开发领域,Flask是一个轻量级的Web应用框架,而sqlite3则是Python标准库中的一个模块,用于处理嵌入式SQL数据库。这个名为“Python-使用Flask和sqlite3编写的项目目录应用程序”的项目,显然是利用这...
uni-app是一个由ECharts团队开发的跨平台前端框架,它允许开发者使用Vue.js语法编写一次代码,然后可以发布到iOS、Android、H5、小程序等多个平台。uni-app提供了丰富的组件和API,使得开发移动应用变得简单高效。 ...
ASP.NET MVC4与SQLite是一个强大的组合,用于构建高效、轻量级的Web应用程序。ASP.NET MVC4是一个基于模型-视图-控制器(MVC)设计模式的开源框架,它允许开发者构建可维护、可测试的Web应用。SQLite则是一个便携式...
SQLiteStudio是一款功能强大的SQLite数据库管理工具,它提供了一个直观的用户界面,使得数据库操作变得简单易行。这个压缩包文件包含了一系列与SQLiteStudio运行相关的组件和库文件,这些文件对于理解SQLite数据库...
在"sqlite_Overprint"这个入门级的demo中,你可能会找到以上步骤的具体实现,包括数据库操作类的设计、WinForm控件与数据库的绑定以及Web服务接口的编写。这些示例代码可以帮助初学者快速理解如何在C#环境中有效利用...