我在 flutter 应用程序中添加了 sqflite 数据库的数据库迁移逻辑。它包括以下sql命令:
db.execute("ALTER TABLE notes ADD COLUMN time TEXT DEFAULT ? NOT NULL", [currentTime])
这里 db 是数据库类型,currentTime 是字符串类型。
当我在 Android 设备中运行该应用程序时,我得到以下执行:
error DatabaseException(near "?": syntax error (code 1 SQLITE_ERROR): , while compiling: ALTER TABLE notes ADD COLUMN time TEXT DEFAULT ? NOT NULL) sql 'ALTER TABLE notes ADD COLUMN time TEXT DEFAULT ? NOT NULL' args [2024-04-13 15:18:38.424054Z] during open, closing...
为什么 sqflite 不替换我提供的参数以及 sql 参数。有没有安全的方法来使用执行功能?
不要使用可选参数:
尝试将您的查询设为一个:
db.execute("ALTER TABLE notes ADD COLUMN time TEXT DEFAULT 'DummyDate' NOT NULL");
您还可以尝试使用 Transaction 属性:
await database.transaction((txn) async {
await txn.execute("ALTER TABLE notes ADD COLUMN time TEXT DEFAULT 'DummyDate' NOT NULL");
});
希望对您有帮助。