我有一个包含几个SQL语句的文件,我想用它来初始化一个新的sqlite3数据库文件 . 显然, sqlite3 only handles multiple statements in one query via the sqlite3_exec()
函数和 not 通过 prepare/step/finalize
函数 . 's all fine, but I'喜欢直接使用QtSQL api而不是c api . 通过QSqlQuery加载到相同的初始化文件中只执行第一个语句,就像直接使用sqlite3 api中的prepare / step / finalize函数一样 . 有没有办法让QSqlQuery运行多个查询而无需为每个语句单独调用query.exec()?
2 回答
正如QSqlQuery::prepare()和QSqlQuery::exec()的Qt文档中明确指出的那样,
正如您已经猜到的,这个限制的唯一已知解决方法是将所有sql语句用一些字符串分隔,拆分语句并在循环中执行每个语句 .
请参阅以下示例代码(使用“;”作为分隔符,并假设在查询中未使用相同的字符 . 这缺乏一般性,因为您可能在/ insert / update语句中的字符串文字中具有给定字符):
我写了一个简单的函数来从一个文件读取SQL并一次执行一个语句 .
http://www.fluxitek.fi/2013/10/reading-sql-text-file-sqlite-database-qt/
https://gist.github.com/savolai/6852986