QT里使用sqlite的问题,好多坑


1. 我使用sqlite,开发机上好好的,测试机上却不行。后来发现是缺少驱动(Driver not loaded Driver not loaded),代码检查了又检查,发现应该是缺少dll文件(系统不提示,是自己使用 QMessageBox::warning(NULL, ("error"), database.lastError().text());后猜到的)。于是自己千方百计的想办法,反复测试,就是不行。结果悲剧的发现,原来是多次设置路径错误,浪费一上午时间。应该直接在可执行exe文件的同一目录下设置目录和文件如下即可:
my.exe\sqldrivers\qsqlite4.dll
既不要写成:
my.exe\plugins\sqldrivers\qsqlite4.dll
也不要写成
my.exe\sqldrivers\sqlite\qsqlite4.dll (因为QT自己的目录就是C:\Qt\4.8.6_2008\src\plugins\sqldrivers\sqlite)
另外,放在my.exe同一目录下也没有用。

2. 编程的时候,注意不能使用new QSqlDatabase();后调用addDatabase()函数。原因是什么我也不知道,反正结论在这里:
http://qt-project.org/doc/qt-4.8/qsqldatabase.html#open

3. 编程的时候注意,要填上QSQLITE,不是SQLITE
QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");

4. 使用QSqlDatabase::addDatabase函数的时候,如果是一个临时对象,那么要把它命名一下,比如(关键是第二个参数):
QSqlDatabase localdb = QSqlDatabase::addDatabase("QSQLITE", "Old_DB");
如果不写这第二个参数,那么就会把这个新连接当作默认连接,这样申请QSqlQuery对象但不写明数据库连接的话就会出错。

5. 使用 QSqlDatabase::removeDatabase的时候,必须把前面所有语句括号括起来,莫名其妙的一种用法。不过既然是官方文档这样说,就记住它,遵守它,相关链接在这里:
http://qt-project.org/doc/qt-4.8/qsqldatabase.html#removeDatabase

6. 还有一个文件qsqlited4.dll,不知道是干什么。

7. 可以很方便的使用VS编译C:\Qt\4.8.6_2008\src\plugins\sqldrivers\sqlite路径下的sqlite.pro工程文件,Release编译后得到一个dll,放在相关的路径里使用没有问题。

8. Process Explorer这个软件可以清楚地显示,当前开发exe文件依赖哪些DLL,很有帮助。这样就不用动脑筋了,观察结果即可。比如它我对这个项目提示依赖:

C:\Qt\4.8.6_2008\plugins\sqldrivers\qsqlite4.dll
但是注意,它提示的是开发机上的dll路径,客户机上的路径不一定是这样的。

但它的提示也只能作为一种参考,不能完全当真,它还提示我使用:
C:\Qt\4.8.6_2008\plugins\imageformats\qtiff4.dll
可是我根本就没有使用tiff文件。所以这个提示作为一种参考,找到自己需要的信息即可。

总结,QT发布版的坑真是多,怪不得QT公司不让免费用户静态编译和修改,大概是只让高手们用它来玩的。不知道静态编译是否可以避免这些问题。

---------------------------------------------------------------------------

几个有用连接:
http://qt-project.org/doc/qt-4.8/sql-driver.html
http://blog.sina.com.cn/s/blog_a6fb6cc90101gx30.html
http://blog.csdn.net/hustyangju/article/details/17799189
http://blog.chinaunix.net/uid-28394603-id-3775493.html (讨论回滚)

安装MySQL驱动:
http://blog.sina.com.cn/s/blog_74a7e56e01017s64.html

插件工作机制:
http://blog.csdn.net/dbzhang800/article/details/6543489
http://blog.csdn.net/csfreebird/article/details/17793161

SQLite学习手册
http://my.oschina.net/eechen/blog/84641
http://my.oschina.net/eechen/blog/84639
http://www.oschina.net/question/12_53183 (一个小时内学习 SQLite 数据库)


FROM:  http://www.cnblogs.com/findumars/p/4207133.html


  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!Qt 是一个跨平台的应用程序开发框架,它提供了丰富的工具和组件来简化应用程序的开发过程。使用 Qt 进行 SQLite 数据库的操作非常简单。 首先,确保你的 Qt 项目中已经包含了 SQLite 驱动程序。在项目文件(.pro)中添加以下行: ``` QT += sql ``` 接下来,你需要创建一个数据库连接。可以使用 `QSqlDatabase` 类来实现。以下是一个示例: ```cpp #include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("path/to/your/database.db"); if (!db.open()) { qDebug() << "Failed to connect to database!"; return -1; } // 这可以进行数据库操作 db.close(); return a.exec(); } ``` 以上代码中,我们创建了一个名为 `db` 的 `QSqlDatabase` 对象,并设置了数据库的驱动程序为 SQLite,并指定了数据库文件的路径。然后我们可以使用 `open()` 方法打开数据库连接,如果连接成功则返回 `true`,否则会返回 `false`。 接下来,你就可以在打开的数据库连接上执行 SQL 查询和操作了。你可以使用 `QSqlQuery` 类来执行查询,并获取结果。以下是一个简单的示例: ```cpp #include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("path/to/your/database.db"); if (!db.open()) { qDebug() << "Failed to connect to database!"; return -1; } QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)"); // 插入数据 query.prepare("INSERT INTO users (name) VALUES (:name)"); query.bindValue(":name", "John Doe"); query.exec(); // 查询数据 query.exec("SELECT * FROM users"); while (query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); qDebug() << "ID:" << id << "Name:" << name; } db.close(); return a.exec(); } ``` 以上代码中,我们首先创建了一个名为 `users` 的表,然后插入了一条数据,并执行了一个简单的查询,将结果打印出来。 这只是一个简单的示例,你可以根据自己的需求进行更复杂的数据库操作。希望对你有所帮助!如果有任何问题,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值