【问题标题】:Cordova / Sqlite foreign keysCordova / Sqlite 外键
【发布时间】:2015-09-24 22:09:40
【问题描述】:

我正在尝试使用 Cordova 和 sqlite 运行一个简单的示例

这是我的javascript代码`

var dbName = "PresentationDB";
var dbVersion = "1.0";
var bdSize = 100000;
var displayName = "TTPresentationDB";
var db = null;

var app = {


initialize: function() {
    this.bindEvents();
},
bindEvents: function() {
    document.addEventListener('deviceready', this.onDeviceReady, false);
},

onDeviceReady: function() {
    app.receivedEvent('deviceready');
    db = createdb();
    alert(db);
    db.transaction(populatedb,errorCallBack,successCallBack);

 },
// Update DOM on a Received Event
receivedEvent: function(id) {

    console.log('Received Event: ' + id);
}



};

app.initialize();


function createdb()
{

 if (!window.openDatabase)
 {
   alert("Your browser does not support openDatabase");
 }
 alert("creating db..");
 return window.openDatabase(dbName, dbVersion, displayName, bdSize);

 }


function populatedb(tx)
{
tx.executeSql('CREATE TABLE IF NOT EXISTS PAGE (id_page INTEGER PRIMARY KEY 
   AUTOINCREMENT, title VARCHAR(255), description TEXT, num_visits DATE, 
   last_visited DATE)');
tx.executeSql('CREATE TABLE IF NOT EXISTS CONTENT (id_content INTEGER PRIMARY
   KEY AUTOINCREMENT, FOREIGN KEY(id_page) REFERENCES PAGE (id_page))');
tx.executeSql('CREATE TABLE IF NOT EXISTS ARTICLE (id_article INTEGER PRIMARY 
   KEY AUTOINCREMENT, title VARCHAR(255), text TEXT, description TEXT, FOREIGN 
   KEY (id_page) REFERENCES PAGE (id_page))');
tx.executeSql('INSERT INTO PAGE (title, description, num_visits, 
   last_visited) VALUES ("First Page", "Test Page", CURRENT_TIME, 
   CURRENT_TIME)');
tx.executeSql('INSERT INTO CONTENT (id_page) VALUES (1)');
tx.executeSql('INSERT INTO ARTICLE (title, text, description, id_page) VALUES 
   ("Article 1 Page 1", "Test Article", 1)');
tx.executeSql('INSERT INTO ARTICLE (title, text, description, id_page) VALUES 
   ("Article 2 Page 1", "Test Article", 1)');


}

function successCallBack()
{
    alert("Sucess");
    //alert("Returned rows = " + results.rows.length);
}


 function errorCallBack(tx, err)
 {
  alert("Error : " + err );
 }

function queryDB(tx)  
{
   tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);

}

`

我添加外键时的行导致错误,有没有办法为 SQLITE 和 Cordova 创建关系数据库?

【问题讨论】:

  • 你应该显示完整的输出,说它导致错误没有帮助
  • alert(db); 显示 db 不为 null 且其类型为 DatabaseObject 而 alert(err); 显示未定义错误。

标签: sql sqlite cordova


【解决方案1】:

外键也应该定义为属性。

CREATE TABLE IF NOT EXISTS CONTENT (id_content INTEGER PRIMARY
   KEY AUTOINCREMENT,id_page INTEGER, FOREIGN KEY(id_page) REFERENCES PAGE (id_page))'

适用于 Web SQLSqlite 插件

【讨论】:

  • 对不起,我可以使用多个外键,例如CREATE TABLE IF NOT EXISTS CONTENT (id_content INTEGER PRIMARY KEY AUTOINCREMENT,id_page INTEGER, FOREIGN KEY(id_page) REFERENCES PAGE (id_page), id_number INTEGER, FOREIGN KEY(id_number) REFERENCES PAGE (id_number))
【解决方案2】:

您的代码正在使用 Web SQL,它不能正确支持外键。我建议您考虑改用https://github.com/litehelpers/Cordova-sqlite-storage(我正在维护)。

【讨论】:

  • 不好意思,只支持使用cordova插件的外键?
猜你喜欢
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2014-01-17
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多