- 浏览: 1613266 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (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打印
sqlite.js
/** A very simple Javascript layer for the web based SQLite database. example usage: var db = SQLite({ shortName: 'mydb' }); db.createTable('people', 'name TEXT, age INTEGER'); db.insert('people', { name: 'Jeremy', age: 29 }); db.update('people', { age: 30 }, { name: 'Jeremy' }); db.select('people', '*', { age: 30 }, function (results) { var x; for(x=0; x<results.rows.length; x++) { console.log(results.rows.item(x)); } }); db.destroy('people', { age: 30 }); Conditions can be: * a number: defaults to 'WHERE id=number' * a string: generates 'WHERE string' * an array: generates 'WHERE val1 AND val2' * a hash: generates 'WHERE key=hash[key] AND key2=hash[key2]' 另外的例子: function pass(results, query) { var target = document.getElementById('results'), html = target.innerHTML; target.innerHTML = html + 'pass - ' + query + '<br />'; } function fail(error, query) { var target = document.getElementById('results'), html = target.innerHTML; target.innerHTML = html + 'fail - ' + error.message + ': ' + query + '<br />'; } var db = SQLite({ shortName: 'mydb' + parseInt(Math.random() * 100000), defaultErrorHandler: fail, defaultDataHandler: pass }); db.createTable('people', 'name TEXT, age INTEGER'); db.insert('people', { name: "Jeremy", age: 29 }); db.insert('people', { name: "Tara", age: 28 }); db.update('people', { age: 30 }, { name: 'Jeremy' }); db.select('people', '*', { age: 30 }, null, function (r, q) { pass(r, q); var x; for(x=0; x<r.rows.length; x++) { console.log(r.rows.item(x)); } }); db.select('people', 'name', null, { order: 'age DESC' }, function (r, q) { pass(r, q); var x; for(x=0; x<r.rows.length; x++) { console.log(r.rows.item(x)); } }); db.select('people', 'name', null, { limit: 1 }, function (r, q) { pass(r, q); var x; for(x=0; x<r.rows.length; x++) { console.log(r.rows.item(x)); } }); db.destroy('people', { age: 30 }); 初始化参数: cfg.shortName:数据库名称,默认是 'mydatabase' cfg.version:数据库版本,默认是 '1.0' cfg.displayName:数据库显示名称,默认是 'My SQLite Database' cfg.maxSize:数据库最大占用空间,默认是 65536 cfg.defaultErrorHandler = 出错处理函数,默认是 errorHandler cfg.defaultDataHandler = 数据处理函数,默认是 nullDataHandler (即不处理) * @param {} cfg */ function SQLite(cfg) { if (typeof window.openDatabase === 'undefined') { return; } function log(str) { if (typeof console !== 'undefined') { console.log(str); } } function isNumber(val) { switch (typeof val) { case 'number': return true; case 'string': return (/^\d+$/).test(val); case 'object': return false; } } /** * 默认数据处理函数 * @param {} results */ function nullDataHandler(results) { } /** * 默认出错处理函数 * @param {} error */ function errorHandler(error) { log('Oops. ' + error.message + ' (Code ' + error.code + ')'); } var config = cfg || {}, db; config.shortName = config.shortName || 'mydatabase'; config.version = config.version || '1.0'; config.displayName = config.displayName || 'My SQLite Database'; config.maxSize = 65536; config.defaultErrorHandler = config.defaultErrorHandler || errorHandler; config.defaultDataHandler = config.defaultDataHandler || nullDataHandler; //创建数据库 try { db = openDatabase(config.shortName, config.version, config.displayName, config.maxSize); } catch (e) { if (e === 2) { log("Invalid database version."); } else { log("Unknown error " + e + "."); } return; } /** * 执行查询 * @param {} query 查询语句 * @param {} v 数据 * @param {} d 数据处理回调函数 * @param {} e 出错处理回调函数 */ function execute(query, v, d, e) { var values = v || [], dH = d || config.defaultDataHandler, eH = e || config.defaultErrorHandler; if (!query || query === '') { return; } function err(t, error) { eH(error, query); } function data(t, result) { dH(result, query); } db.transaction( function (transaction) { transaction.executeSql(query, values, data, err); } ); } /** * 构造查询条件 * @param {} conditions * @return {} */ function buildConditions(conditions) { var results = [], values = [], x; if (typeof conditions === 'string') { results.push(conditions); } else if (typeof conditions === 'number') { results.push("id=?"); values.push(conditions); } else if (typeof conditions === 'object') { for (x in conditions) { if (conditions.hasOwnProperty(x)) { if (isNumber(x)) { results.push(conditions[x]); } else { results.push(x + '=?'); values.push(conditions[x]); } } } } if (results.length > 0) { results = " WHERE " + results.join(' AND '); } else { results = ''; } return [results, values]; } function createTableSQL(name, cols) { var query = "CREATE TABLE " + name + "(" + cols + ");"; return [query, []]; } function dropTableSQL(name) { var query = "DROP TABLE " + name + ";"; return [query, []]; } function insertSQL(table, map) { var query = "INSERT INTO " + table + " (#k#) VALUES(#v#);", keys = [], holders = [], values = [], x; for (x in map) { if (map.hasOwnProperty(x)) { keys.push(x); holders.push('?'); values.push(map[x]); } } query = query.replace("#k#", keys.join(',')); query = query.replace("#v#", holders.join(',')); return [query, values]; } function updateSQL(table, map, conditions) { var query = "UPDATE " + table + " SET #k##m#", keys = [], values = [], x; for (x in map) { if (map.hasOwnProperty(x)) { keys.push(x + '=?'); values.push(map[x]); } } conditions = buildConditions(conditions); values = values.concat(conditions[1]); query = query.replace("#k#", keys.join(',')); query = query.replace("#m#", conditions[0]); return [query, values]; } function selectSQL(table, columns, conditions, options) { var query = 'SELECT #col# FROM ' + table + '#cond#', values = []; if (typeof columns === 'undefined') { columns = '*'; } else if (typeof columns === 'object') { columns.join(','); } conditions = buildConditions(conditions); values = values.concat(conditions[1]); query = query.replace("#col#", columns); query = query.replace('#cond#', conditions[0]); if (options) { if (options.limit) { query = query + ' LIMIT ?'; values.push(options.limit); } if (options.order) { query = query + ' ORDER BY ?'; values.push(options.order); } if (options.offset) { query = query + ' OFFSET ?'; values.push(options.offset); } } query = query + ';'; return [query, values]; } function destroySQL(table, conditions) { var query = 'DELETE FROM ' + table + '#c#;'; conditions = buildConditions(conditions); query = query.replace('#c#', conditions[0]); return [query, conditions[1]]; } return { database: db, createTable: function (name, cols, data, error) { var sql = createTableSQL(name, cols); execute(sql[0], sql[1], data, error); }, dropTable: function (name, data, error) { var sql = dropTableSQL(name); execute(sql[0], sql[1], data, error); }, insert: function (table, map, data, error) { var sql = insertSQL(table, map); execute(sql[0], sql[1], data, error); }, update: function (table, map, conditions, data, error) { var sql = updateSQL(table, map, conditions); execute(sql[0], sql[1], data, error); }, select: function (table, columns, conditions, options, data, error) { var sql = selectSQL(table, columns, conditions, options); execute(sql[0], sql[1], data, error); }, destroy: function (table, conditions, data, error) { var sql = destroySQL(table, conditions); execute(sql[0], sql[1], data, error); } }; }
用法:
<!DOCTYPE html> <html lang="en-us"> <head> <title>Test Suite for sqlite.js</title> <script src="sqlite.js" type="text/javascript"></script> </head> <body> <div id="results"></div> <script type="text/javascript" charset="utf-8"> function pass(results, query) { var target = document.getElementById('results'), html = target.innerHTML; target.innerHTML = html + 'pass - ' + query + '<br />'; } function fail(error, query) { var target = document.getElementById('results'), html = target.innerHTML; target.innerHTML = html + 'fail - ' + error.message + ': ' + query + '<br />'; } var db = SQLite({ shortName: 'mydb' + parseInt(Math.random() * 100000), defaultErrorHandler: fail, defaultDataHandler: pass }); db.createTable('people', 'name TEXT, age INTEGER'); db.insert('people', { name: "Jeremy", age: 29 }); db.insert('people', { name: "Tara", age: 28 }); db.update('people', { age: 30 }, { name: 'Jeremy' }); db.select('people', '*', { age: 30 }, null, function (r, q) { pass(r, q); var x; for(x=0; x<r.rows.length; x++) { console.log(r.rows.item(x)); } }); db.select('people', 'name', null, { order: 'age DESC' }, function (r, q) { pass(r, q); var x; for(x=0; x<r.rows.length; x++) { console.log(r.rows.item(x)); } }); db.select('people', 'name', null, { limit: 1 }, function (r, q) { pass(r, q); var x; for(x=0; x<r.rows.length; x++) { console.log(r.rows.item(x)); } }); db.destroy('people', { age: 30 }); </script> </body> </html>
发表评论
-
一句话实现五星评分显示
2018-06-05 08:31 999Python: rate = 1 #rate 取值 ... -
来算google的可视化编程工具——Blockly,不仅仅是玩具
2017-10-16 21:34 33165Blockly - 来自Google的可 ... -
十步以内完成精细web打印
2017-06-21 11:44 7392注意: 康虎云报表组 ... -
MySQL正则替换函数
2017-05-24 13:01 1982DELIMITER $$ CREATE FUNCTION ... -
MySQL 对比数据库表结构
2017-02-14 17:41 1324MySQL 对比数据库表结 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6706注意: 康虎云报表 ... -
让ie6 7 8 9支持html5 websocket
2016-12-23 20:52 2324结果: 从github上的 web ... -
如何让三列div中间那个自适应宽度
2016-12-03 18:46 723效果如图: 直接上代码,具体看注释: < ... -
在MySQL中全库搜索指定字符串
2016-11-13 07:47 2564有时候,需要从整个MySQL库中搜索某一字符串,但却不知道 ... -
Sql注入之sqlmap+dvwa实例演练
2016-10-27 16:27 1606Sql注入之sqlmap+dvwa实例演练 相信 ... -
Windown下最简安装nodejs和npm
2016-06-20 21:03 690Windown下最简安装nodejs和npm 一、下 ... -
在Ubuntu 16.04上安装Odoo8(附自动安装脚本)
2016-06-09 13:02 2584在Ubuntu 16.04上安装Odoo8 一、安 ... -
ODOO9 SAAS 全自动安装脚本 基于Ubuntu 14.04 LTS
2016-05-09 10:37 2497install-odoo-saas.sh #! ... -
MySQL同类记录获取最新一条
2016-03-28 13:36 1544表结构如下: MySQL> SELECT * FRO ... -
Mybatis Generator配置详解(中文)_转
2015-12-17 16:44 925来自: http://www.jianshu.com/p/e ... -
一个提供大量数据模型的网站
2015-12-17 14:00 997网站地址是:http://www.databaseansw ... -
SQL Server Base64函数
2015-12-09 13:41 1433IF OBJECT_ID(N'dbo.c_GetUTF8Cod ... -
Node.js下载地址
2015-11-19 14:16 740http://nodejs.org/dist/ -
推荐一个Chrome扩展,Ripple Emulator
2015-09-02 16:05 892推荐一个Chrome扩展,Ripple Emulator。 ... -
Odoo安装脚本
2015-08-17 23:25 1247#!/bin/bash ################# ...
相关推荐
该项目是一款基于freeRTOS操作系统和STM32F103x微控制器的手机远程控制浴室温度系统设计源码,共包含1087个文件,包括580个C语言源文件、269个头文件、45个汇编源文件、36个数据文件、36个目标文件、35个编译规则文件、28个包含文件、27个文本文件、6个源文件、3个归档文件。此系统通过手机远程实现对浴室温度的有效控制,适用于智能浴室环境管理。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。