【问题标题】:Import .csv file to sqlite3 database table on QT gui将 .csv 文件导入 QT gui 上的 sqlite3 数据库表
【发布时间】:2015-02-05 17:28:12
【问题描述】:

我正在编写一个 QT GUI 应用程序,它将一个 .csv 文件导入到一个 sqlite 数据库表中 我的 .csv 文件位于路径 /home/aj/import_table.csv 我的数据库在 /home/aj/testdatabase.db

我写了下面的代码块---

void MainWindow::on_importButton_clicked()
{
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("/home/aj/testdatabase.db");

    QString querystr;
    querystr=QString(".separator ","");
    QSqlQuery query(querystr,db);
    if(query.exec())
    {
        qDebug()<<"SUCCESSFULLY QUEIRED ";

        QString querystr2;
        querystr=QString(".import import_table.csv test_table");
    }
    else
    {
        qDebug()<<"ERROR DURING QUERY "<<db.lastError().text();
    }
}

但它在编译时抛出错误--

/home/aj/sqlite3test/mainwindow.cpp:34:错误:从‘const char*’到‘int’的无效转换[-fpermissive]
/home/aj/sqlite3test/mainwindow.cpp:34:错误:从“const char [1]”到“QChar”的转换不明确
/home/aj/sqlite3test/mainwindow.cpp:34:错误:从“const char [1]”到“QChar”的转换不明确
/usr/local/Trolltech/Qt-4.8.4/include/QtCore/qstring.h:90:错误:正在初始化“QString::QString(int, QChar)”的参数 1 [-fpermissive]

任何解决方案???

是不是因为 .separator 和 .import 是 sqlite 终端命令,不能通过 querystr=Qstring("... ... ...");格式???

【问题讨论】:

  • “但它在运行时抛出错误”——对我来说,这些看起来像是编译错误。
  • 该函数的第 34 行是哪一行?
  • 对不起,编译时间..
  • querystr=QString(".separator ","");是第 34 行

标签: c++ qt sqlite qt4


【解决方案1】:

这一行:

querystr=QString(".separator ","");

正在尝试使用两个 const char * 作为构造函数的参数来构造 QString。根据the documentation,没有构造函数可以接受这种组合。

我认为您的意思是在字符串中包含 (") 引号。您需要使用反斜杠将它们转义,如下所示:

querystr=QString(".separator \",\"");

以便编译器知道它们应该是字符串的一部分,而不是分隔它。

这应该可以解决您的编译错误,但是您最后的评论是正确的,SQLite documentation 声明:

当然,重要的是要记住点命令是 由 sqlite3.exe 命令行程序解释,而不是由 SQLite 本身。所以没有一个点命令可以作为 SQLite 的参数 sqlite3_prepare() 或 sqlite3_exec() 等接口。

换句话说,如果你想从你自己编写的 C++ 程序中读入一个 CSV 文件,你必须用你自己的代码解析这个文件并通过 SQL INSERT 命令插入记录。

【讨论】:

  • 非常感谢您确认我对 .dot-commands 的怀疑。编译错误现在已删除,但它仍然不起作用。有关将 .dot 命令解析为我的 c++ 程序的任何教程链接/文档???
  • @AmarjitBiswas 正如答案中所述,您不能直接从 C++ 程序调用 .dot 命令。你可以使用例如。 popen 运行 sqlite cli 工具并使用它进行导入,但我不建议这样做。我建议编写自己的简单解析和插入例程。
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2016-12-30
相关资源
最近更新 更多