2015-07-07 2 views
4

Я пытаюсь запустить простой пример использования Кордова и SQLiteКордова/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?

+1

Вы должны показать полный вывод, заявив, что он вызывает ошибки, не помогает – AshBringer

+0

'alert (db); 'показывает, что db не является нулевым, а его тип - DatabaseObject, а' alert (err); 'говорит Undefined ошибка. – Anima

ответ

4

Внешний ключ также должен быть определен как атрибут.

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

Прекрасно работает с Web SQL и Sqlite плагин.

+0

Excuseme, я могу использовать кратный внешний ключ, например, 'CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ СОДЕРЖАНИЕ (id_content INTEGER PRIMARY KEY AUTOINCREMENT, id_page INTEGER, FOREIGN KEY (id_page) СТРАНИЦА ССЫЛКИ (id_page), id_number INTEGER, FOREIGN KEY (id_number) СТРАНИЦА ССЫЛКИ (id_number)) ' –

1

Ваш код использует Web SQL, который не поддерживает внешние ключи должным образом. Я рекомендую вам использовать вместо этого https://github.com/litehelpers/Cordova-sqlite-storage (который я поддерживаю).

+0

Excuseme, поддерживает только внешние ключи, используя плагин cordova? –

Смежные вопросы