
/*************************************/ |
/* 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) 回复
不能用啊 出现页面崩溃
回复评论