Websql不适用于phonegap构建

Posted

技术标签:

【中文标题】Websql不适用于phonegap构建【英文标题】:Websql not working on phonegap build 【发布时间】:2015-04-07 12:25:58 【问题描述】:

我在 phonegap 上尝试基本的 sql 操作,但它显示一个空白页。 sql 操作在 safari 上正常运行。

代码如下:

<!DOCTYPE html>
<html>
<head>
<script src="cordova.js"></script>
<script type="text/javascript">
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
var msg;
db.transaction(function (tx) 
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, log)');
tx.executeSql('INSERT INTO DEMO (id, log) VALUES (1, "foobar")');
tx.executeSql('INSERT INTO DEMO (id, log) VALUES (2, "logmsg")');
msg = '<p>Log message created and row inserted.</p>';
document.querySelector('#status').innerHTML =  msg;
);

db.transaction(function (tx) 
tx.executeSql('SELECT * FROM DEMO', [], function (tx, results) 
var len = results.rows.length, i;
msg = "<p>Found rows: " + len + "</p>";
document.querySelector('#status').innerHTML +=  msg;
for (i = 0; i < len; i++)
 msg = "<p><b>" + results.rows.item(i).log +"</b></p>";
 document.querySelector('#status').innerHTML +=  msg;

, null);
);
</script>
</head>
<body>
<div id="status" name="status">Status Message</div>
</body>
</html>   

代码有问题吗?

【问题讨论】:

【参考方案1】:

试试这个:

var db = openDatabase('CBDB', '1.0','mySpecialDatabaseThatWontWork',10*1024*1024);

db.transaction(function (tx)
tx.executeSql('DROP TABLE IF EXISTS cb');
alert("dropped table");
createDB();
queryDB();
,
function (tx, error) 
// error
alert('0.Something went wrong: '+ error.message);
);

function createDB()
db.transaction(function (tx)        
    tx.executeSql('CREATE TABLE IF NOT EXISTS cb (id unique, text)');
    tx.executeSql('INSERT INTO cb (id, text) VALUES (1, "myTest")');
    tx.executeSql('INSERT INTO cb (id, text) VALUES (2, "another")');
    tx.executeSql('INSERT INTO cb (id, text) VALUES (3, "andYetAnother")');
    tx.executeSql('INSERT INTO cb (id, text) VALUES (4, "ohAndAgain")');
    alert("DB success");  
    ,
    function (tx, error) 
        // error
        alert('1.Something went wrong: '+ error.message);
    );
 

function queryDB()
db.transaction(function (tx) 
    tx.executeSql('SELECT * FROM cb',[], function (tx, results) 
        var rows = results.rows;
        alert(rows.length);
        for (var index = 0; index < rows.length; index++) 
            var x = rows.item(index);
            alert(x.text);
         
    ,
    function (tx, error) 
    // error
    alert('2.Something went wrong: '+ error.message);
    );
);

【讨论】:

【参考方案2】:

您的代码中没有成功和错误方法。 试试这个方法,这样你就可以知道错误在哪里了:

db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
db.transaction(createDB, errorCB, successCB);

function createDB(tx) 
      tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, log)');
      tx.executeSql('INSERT INTO DEMO (id, log) VALUES (1, "foobar")');
      tx.executeSql('INSERT INTO DEMO (id, log) VALUES (2, "logmsg")');

      console.log("Table created");


function errorCB(tx, err) 
        console.log("Error processing SQL: "+err);
    

function successCB() 
        console.log("DB success!");


【讨论】:

谢谢.....但问题是当我将它打包为 phonegap 应用程序时,我无法查看控制台消息..或者有什么方法可以查看它们?..它在 safari 上正常工作没有错误。 你需要添加这个插件来获取控制台消息:“org.apache.cordova.console”

以上是关于Websql不适用于phonegap构建的主要内容,如果未能解决你的问题,请参考以下文章

JayData / Phonegap 适用于 iPad 模拟器但不适用于 iPad 设备

Facebook 插件不适用于 phonegap 构建

相机插件不适用于 Android 的 PhoneGap Build

Phonegap fileTransfer.Download 不适用于 ios phonegap 3.0

通知不适用于 ios8 - Pushwoosh + phonegap

phonegap 相机适用于 iPhone,但不适用于 iPad