将.csv文件导入QT gui上的sqlite3数据库表

时间:2014-12-08 04:42:47

标签: c++ qt sqlite qt4

我正在编写一个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; ...... ......&#34;);格式???

1 个答案:

答案 0 :(得分:4)

这一行:

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

正在尝试使用两个const char *构造一个QString作为构造函数的参数。根据{{​​3}},没有构造函数接受这种组合。

我认为你打算在字符串中包含(“)引号。你需要用反斜杠转义它们,如下所示:

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

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

这应该可以解决您的编译错误, HOWEVER 您的上一条评论是正确的,the documentation州:

  

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

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