[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');
}
});
初级程序员
by: 华安 发表于:2016-09-21 19:07:37 顶(0) | 踩(0) 回复
不能用啊 出现页面崩溃
回复评论