Javascript中的SQLite访问
我想用JavaScript代码访问SQLLite数据库。JavaScript代码用于html5,必须部署在blackberry 10平台上。 我使用以下代码但未成功:Javascript中的SQLite访问,javascript,html,sqlite,blackberry-10,Javascript,Html,Sqlite,Blackberry 10,我想用JavaScript代码访问SQLLite数据库。JavaScript代码用于html5,必须部署在blackberry 10平台上。 我使用以下代码但未成功: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="conte
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Prova</title>
</head>
<body>
<script type="text/javascript">
//Provenia SRL ITC - Paola Savioli
//Questa funzione apre il database SQL Lite
//Il parametro che va cambiato è il nome del database
function ApriDatabase() {
try {
if (window.openDatabase) {
var shortName = 'Ristoranti.sqllite';
var version = '1.0';
var displayName = 'Ristoranti italia';
var maxSize = 65536; // in bytes
db = openDatabase(shortName, version, displayName, maxSize);
}
} catch (e) {
alert('Apri Database' + e);
}
}
//Provenia SRL ITC - Paola Savioli
// Questa funzione eseque una query su un database aperto con la funzione ApriDatabase
function EseguiQuery($query, callback) {
try {
ApriDatabase();
if (window.openDatabase) {
db.transaction(
function (tx) {
tx.executeSql($query, [], function (tx, result) {
if (typeof (callback) == "function") {
callback(result);
} else {
if (callback != undefined) {
eval(callback + "(result)");
}
}
}, function (tx, error) {});
});
return rslt;
}
} catch (e) {
alert('Esegui Query' + e);
}
}
function VisualizzaComuni() {
try {
var schemanode = document.GetElementById('RCOMUNI');
schemanode.innerHTML = "";
var result = EseguiQuery('SELECT * FROM COMUNE');
for (var i = 0; i < result.rows.lenght; ++i) {
var row = result.row.item(i);
var notediv = document.createElement('div');
notediv.innerHTML = 'Codice Provincia:' + row['PROVINCIA'] + 'Nome:' + row['NAME'];
schemanode.appendchild(notediv);
}
} catch (e) {
alert('Visualizza Comuni' + e);
}
}
</script>
<input type="button" name='select' onClick="VisualizzaComuni()"
value='Visualizza Comuni'>
<div id="RCOMUNI"></div>
</body>
</html>
普罗瓦
//普罗旺尼亚SRL ITC-保拉萨维奥利
//Questa funzione apre il数据库SQL Lite
//数据库中的参数
函数ApriDatabase(){
试一试{
if(window.openDatabase){
var shortName='Ristoranti.sqllite';
变量版本='1.0';
var displayName='Ristoranti italia';
var maxSize=65536;//以字节为单位
db=openDatabase(shortName、version、displayName、maxSize);
}
}捕获(e){
警报(“Apri数据库”+e);
}
}
//普罗旺尼亚SRL ITC-保拉萨维奥利
//查询一个数据库到另一个数据库
函数EseguiQuery($query,callback){
试一试{
ApriDatabase();
if(window.openDatabase){
数据库事务(
功能(tx){
tx.executeSql($query,[],函数(tx,result){
if(typeof(回调)=“函数”){
回调(结果);
}否则{
如果(回调!=未定义){
评估(回调+“(结果)”);
}
}
},函数(tx,error){};
});
返回rslt;
}
}捕获(e){
警报(“Esegui查询”+e);
}
}
函数Visualizacomuni(){
试一试{
var schemanode=document.GetElementById('RCOMUNI');
schemanode.innerHTML=“”;
var result=EseguiQuery('SELECT*FROM-COMUNE');
对于(变量i=0;i <代码> > p>您可以考虑使用黑莓7和10支持的。p>
请注意,API永远不会成为官方标准,对它的开发已经停止。但是如果你只是想把黑莓作为目标,这可能是一个有效的选择。你发布的代码有一些问题,包括引用.lenght
而不是.length
,以及在内置成功和错误处理程序时使用try catch
块。所以我制作了一个演示
首先,这似乎没有什么区别,但这就是HTML5,对吗?使用HTML5 doctype,而不是HTML4.01过渡版
doctype:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>demo by userdude</title>
...
这将建立我的数据库,包括运行对populate()的初始调用,以便使用一些数据
open();
这是我添加到run按钮的函数
function query() {
transact('SELECT * FROM Cities', view);
}
这只是为了向数据库添加数据。请参阅上面的城市
变量
function populate(tx) {
var city,
i = 0;
一旦我将cities
条目数组清空到INSERT
,我就会阻止它运行<代码>删除
和创建对删除
和创建
事务执行相同的操作
特别注意我是如何做到这一点的;请参阅事务处理(“…”,填充)
?在这种情况下,我使用populate
循环,直到我添加完所有cities
条目。这是异步的,因此您必须将回调设置为在必要时等待前面的查询运行。在这种情况下,我可能会在添加行后删除表。所以我必须等待,然后循环浏览城市列表
if (cities) {
if (!dropped) {
dropped = true;
transact('DROP TABLE IF EXISTS Cities', populate);
return;
}
if (!created) {
created = true;
transact('CREATE TABLE IF NOT EXISTS Cities (id unique, City)', populate);
return;
}
我不需要在这里重复填充
,因为我只需要插入
并继续
while (city = cities.pop()) {
transact('INSERT INTO Cities (id, City) VALUES (' + i++ + ', "' + city + '")');
}
cities = false;
}
}
此函数所做的一切就是为数据库提供一个打开的或新的引用,或者返回false
。这会使transact()
的执行短路
这是剧本的重点。我从query()
调用它,本例中的回调
是视图
,它指向在结果集中运行的函数,并从结果集中创建一个表
function transact(query, callback) {
var cb = callback,
qel = document.createElement('p'),
qid = queries.length;
if (!open()) {
console.log('HTML5 Database not supported.');
return false;
}
db.transaction(transact_cb);
qel.innerHTML = query + ' Query Result: <span id="q' + qid + '">Pending...</span>';
qtext.appendChild(qel);
queries[qid] = query;
不太清楚为什么里面有一个eval
function transact_success(tx, result) {
var rtext = document.getElementById('q' + qid);
rtext.className = 'success';
rtext.innerHTML = 'Success.';
if (typeof cb == "function") {
cb(result);
} else if (cb != undefined) {
eval(cb + "(result)");
}
}
注意console.log(错误)代码>
function transact_error(tx, error) {
var rtext = document.getElementById('q' + qid);
rtext.className = 'error';
rtext.innerHTML = 'Error logged to console.';
console.log(error);
}
}
此函数创建表
结果集视图。您可能会注意到我循环了每一行和每一行的列
function view(result) {
var thead = '<thead><tr>',
tbody = '<tbody>',
row,
col;
for (var i = 0, rows = result.rows.length; i < rows; ++i) {
row = result.rows.item(i);
tbody += '<tr>';
for (col in row) {
if (i === 0) {
thead += "<th>" + col + "</th>";
}
tbody += '<td>' + row[col] + '</td>';
}
tbody += '</tr>';
}
thead += '</tr></thead>';
tbody += '</tbody>';
data.innerHTML = thead + tbody;
}
});
函数视图(结果){
var thead=“”,
t正文=“”,
一行
上校;
对于(变量i=0,行=result.rows.length;i
通过在此处下载HTML文件,您可以下载该文件并在本地运行(由于安全错误,它不会在JSFIDLE上运行):
好了。希望这将有助于更容易理解。如果您有任何问题,请告诉我。我对blackberry了解不多,但在大多数平台上,不可能有使用Javascript与本地数据库交互的HTML网站(除非它们公开可以使用XmlHttpRequest访问的Web服务)。@Philipp-HTML5在浏览器中包括两个不同的数据库层,包括,由Blackberry 10支持。不过,我不确定这是SQLite格式还是其他格式。下面是BlackBerry10支持的另一个数据库:我只想看看API,看看它提供了什么
function transact_cb(tx) {
tx.executeSql(query, [], transact_success, transact_error);
}
function transact_success(tx, result) {
var rtext = document.getElementById('q' + qid);
rtext.className = 'success';
rtext.innerHTML = 'Success.';
if (typeof cb == "function") {
cb(result);
} else if (cb != undefined) {
eval(cb + "(result)");
}
}
function transact_error(tx, error) {
var rtext = document.getElementById('q' + qid);
rtext.className = 'error';
rtext.innerHTML = 'Error logged to console.';
console.log(error);
}
}
function view(result) {
var thead = '<thead><tr>',
tbody = '<tbody>',
row,
col;
for (var i = 0, rows = result.rows.length; i < rows; ++i) {
row = result.rows.item(i);
tbody += '<tr>';
for (col in row) {
if (i === 0) {
thead += "<th>" + col + "</th>";
}
tbody += '<td>' + row[col] + '</td>';
}
tbody += '</tr>';
}
thead += '</tr></thead>';
tbody += '</tbody>';
data.innerHTML = thead + tbody;
}
});