我正在编写一个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;);格式???
答案 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命令插入记录。