2015-10-13 40 views
1

我有一个使用sql lite插件的cordova windows应用程序。现在看到两个查询做同样的:Sql lite“给定的密钥不在字典中”

1) "CREATE TABLE IF NOT EXISTS Settings (setting TEXT PRIMARY KEY, value TEXT NOT NULL)"; 
2) "CREATE TABLE IF NOT EXISTS Settings (setting TEXT, value TEXT NOT NULL, PRIMARY KEY(setting))"; 

不幸的是,当

"PRAGMA foreign_keys = ON"; 

不幸的是我有多个列的主键的表,第二个会失败,因此需要第二个语法。

example: PRIMARY KEY(setting, value) 

任何想法为什么以及如何解决?

代码:

let db = window.openDatabase("MFS", "", "MFS database", 52428800); 
db.transaction((tx) => { 
    let query1 = "CREATE TABLE IF NOT EXISTS Settings (setting TEXT PRIMARY KEY, value TEXT NOT NULL)", 
     query2 = "CREATE TABLE IF NOT EXISTS Settings (setting TEXT, value TEXT NOT NULL, PRIMARY KEY(setting))"; 
    tx.executeSql(query1/*query2*/, [], (tx, result, query) => { 
    }, (tx, err, query) => { 
     alert(err.message); 
    } 
}); 
+2

这不是一个SQL错误消息。显示你的代码。 –

+0

@CL.just添加了代码。我认为这是SQL错误消息。 –

回答

0

我定义与CREATE TABLE IF NOT EXISTS Settings (setting INTEGER PRIMARY KEY ...主键和它的工作就像一个魅力:

db.transaction(createLocalTableSettings, errorLocalTable, successCreateLocalTableSettings); 

function createLocalTableSettings(tx) { 
    tx.executeSql('CREATE TABLE IF NOT EXISTS Settings (setting INTEGER PRIMARY KEY, value TEXT NOT NULL)'); 
} 
function successCreateLocalTableSettings() { 
     console.log('Settings Table successful created'); 
} 
function errorLocalTable(err) { 
     console.log("Error creating Settings Table! Processing SQL: " + err.sql + " Parameter: " + JSON.stringify(err.params)); 
} 

希望这有助于!

+0

这也适用于我,但它与我的工作查询1.我的查询2在最后的主键定义应该工作,因为我有表具有多个键。还要注意“PRAGMA foreign_keys = ON”;. –

相关问题