React Native Expo SQLite 未执行语句中的所有事务

问题描述 投票:0回答:1

我的代码可以简化为以下内容:

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 插入有什么误解吗?

react-native sqlite expo
1个回答
0
投票

我完全误读了文档。您需要将其分成两个不同的事务。我决定每次都打开一个新的

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; }
    );
});
© www.soinside.com 2019 - 2024. All rights reserved.