我有使用 sql lite 插件的 cordova windows 应用程序。现在看到两个查询执行相同的操作:
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);
}
});
最佳答案
我使用CREATE TABLE IF NOT EXISTS Settings(设置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));
}
希望这有帮助!
关于javascript - SQLite "The given key was not present in the dictionary",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33103244/