c++ - 将准备好的语句与 sqlite 事务语句一起使用

标签 c++ transactions sqlite qt4

<分区>

我试图在 sqlite 中插入大量数据,为了提高性能,我正在使用 transaction 语句。我的代码如下所示: CSVParser 解析器;

   query.exec("BEGIN TRANSACTION;");
   while (!file.atEnd())
    {
           line = file.readLine();
           if (line == "")
                  continue;
            parser << line.toStdString(); // Feed the line to the parser
                // Now extract the columns from the line
            parser >> sCol1 >> sCol2 >> sCol3 >> sCol4;

            // Method one to insert data
            sqlQuery = "INSERT INTO Person(phone, name, firstname, lastname) VALUES (" \
                         "'" + QString(sCol1.c_str()) + \
                         "','" + QString(sCol2.c_str()) + \
                         "','" + QString(sCol4.c_str()) + \
                         "','" + QString(sCol3.c_str()) + "')";
            //query.exec(sqlQuery);

            // Method two to insert data
             query.prepare("INSERT INTO Person(phone, name, firstname, lastname) VALUES (:phone, :name, firstname, :lastname");
             query.bindValue(":phone", QString(sCol1.c_str()));
             query.bindValue(":name", QString(sCol2.c_str()));
             query.bindValue(":firstname", QString(sCol4.c_str()));
             query.bindValue(":lastname", QString(sCol3.c_str()));
             query.exec();
             cout << query.lastError().text().toStdString();
      }

   query.exec("END TRANSACTION;");  

如果我使用第一种方法,数据插入很好,但如果文本包含像这样的“'”这样的字符,则稍后可能会出现问题。为了避免这种情况,我切换到准备语句,一个新问题,没有插入数据。我看到的唯一错误:

Parameter count mismatch Parameter count mismatch Parameter count mismatch Parameter count mismatch Parameter count mismatch Parameter count mismatch Parameter count mismatch Parameter count mismatch Is there I am missing here?

最佳答案

请问是不是这个原因:

query.prepare("INSERT INTO Person(phone, name, firstname, lastname)
    VALUES (:phone, :name, firstname, :lastname");
                                              ^^^
         missing close paren inside the string^^^

关于c++ - 将准备好的语句与 sqlite 事务语句一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828647/

相关文章:

c++ - 使用 makefile 和 g++ 链接到静态库

c++ - 成员函数可以在自由函数可以使用 std::function 的任何地方使用吗?

Postgresql 酸合规性

java - EJB 避免非常长的事务(Wildfly)

sqlite - Android 中存在数据库问题的应用程序类

c++ - 如何调试无痕崩溃

c++ - 用 `new`调用默认参数会导致内存泄漏吗?

java - 如何获取 Oracle 数据库事务 ID(替换 Postgres txid_current())

sql - SQLite日期时间函数的分辨率是多少?

java - 通过 SQLite 数据库条目填充设置变量