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