我的代码可以简化为以下内容:
database.transaction(tx => {
tx.executeSql(
`
CREATE TABLE IF NOT EXISTS ${TABLE_NAMES.Metadata} (
theme TEXT CHECK( theme IN ('dark', 'light') ),
tutorialCompleteDate INTEGER,
userEmail TEXT,
lastPaymentDate INTEGER,
lastExportDate INTEGER,
lastUseDate INTEGER
);
INSERT INTO ${TABLE_NAMES.Metadata}
(theme, tutorialCompleteDate, userEmail, lastExportDate, lastUseDate)
VALUES ('dark', null, null, null, ${new Date().getTime()});
`,
params,
(_, result) => { resolve(result) },
(_, error) => { console.log(error); reject(error); return true; }
);
});
我可以看到顶部的“CREATE TABLE”语句正在执行,但 INSERT INTO 没有创建记录。
更奇怪的是,如果我使 INSERT 查询无效(例如通过添加额外的参数),我会收到错误。但是使用有效的 INSERT 查询,我没有收到任何错误,也没有插入任何记录。
我对 SQLite 插入有什么误解吗?
我完全误读了文档。您需要将其分成两个不同的事务。我决定每次都打开一个新的
database.transaction
调用,所以它看起来更像是这样的:
database.transaction(tx => {
tx.executeSql(
`
CREATE TABLE IF NOT EXISTS ${TABLE_NAMES.Metadata} (
theme TEXT CHECK( theme IN ('dark', 'light') ),
tutorialCompleteDate INTEGER,
userEmail TEXT,
lastPaymentDate INTEGER,
lastExportDate INTEGER,
lastUseDate INTEGER
);
`,
params,
(_, result) => { resolve(result) },
(_, error) => { console.log(error); reject(error); return true; }
);
});
database.transaction(tx => {
tx.executeSql(
`
INSERT INTO ${TABLE_NAMES.Metadata}
(theme, tutorialCompleteDate, userEmail, lastExportDate, lastUseDate)
VALUES ('dark', null, null, null, ${new Date().getTime()});
`,
params,
(_, result) => { resolve(result) },
(_, error) => { console.log(error); reject(error); return true; }
);
});