QT操作数据库 学习基础
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
QT操作数据库学习基础
QT操作数据库学习基础是本文要介绍的内容,对于数据库相信友们有所接触,那么先来看本文。
一.数据库操作
1.MySql驱动编译
在windows系统中,我们在mingw,MySql5和Qt4的环境中编译MySql驱动主要有以下几个步骤:
(1)下载
/download/mingw-utils-0.3.tar.gz ;(2)将mingw-utils-0.3.tar.gz解压缩,将bin目录下的reimp 工具复制到mingw目录下的bin 里,如果Dev-C++就复制到C:\Dev-Cpp\bin目录下
(3)将MySql安装目录下的include和lib目录拷贝到没有空格的路径下,比如C: \mysql下;
(4)打开Qt Command Prompt,分别执行以下命令:
cd c:\mysql\lib\opt reimp -d libmysql.lib dlltool -k -d libmysql.def -l libmysql.a
这样在c:\mysql\lib\opt目录下就会生成一个libmysql.a 文件;
(5)接下来执行以下命令:cd %QTDIR%\src\plugins\sqldrivers\mysql qmake -o Makefile
"INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C :\MYSQL\LIB\OPT\LIBMYSQL.a" mysql.pro
找到%QTDIR%\src\plugins\sqldrivers\mysql\下的Makefile.release 和Makefile.debug文件,去掉-llibmysql 项再make编译,这下便会在%QTDIR%\plugins\sqldrivers目录下面生成libqsqlmysql.a, qsqlmysql.dll这两个文件,然后在程式的.pro文件中添加QT+=sql并在程式开头包含#include 就能操作数据库了。
2.完全解决数据库存储中文和Qt程式显示数据库中文及中文字符串的问题
(1)数据库和表及表里的字符相关字段(varchar, char, text 等)都要使用gbk_chinese_ci这种方式,不这样做也能,但这样做,会省非常多麻烦。
(2)重新编译Qt的MySQL驱动,需要修改src / sql / drivers / mysql / qsql_mysql.cpp文件。要修改的部分如下:第一百零八行的codec函数static QTextCodec* codec(MYSQL* mysql) { return
QTextCodec::codecForName("GBK");//增加部分#if MYSQL_VERSION_ID >= 32321 QTextCodec* heuristicCodec = QTextCodec :: codecForName
( mysql_character_set_name ( mysql ) ); if (heuristicCodec) return heuristicCodec; #endif
return QTextCodec::codecForLocale(); }
(3)然后,重新编译qt的mysql驱动在Qt程式main函数中app后面开头处加入下面三句,加上这三个是省得不必要的麻烦
QTextCodec::setCodecForLocale(QTextCodec::codecFor Name("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecF orName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForNam e("GBK"));
(4)在Qt数据库连接后,运行"SET NAMES ’UTF8’"语句或"SET NAMES ’GBK’"。db =
QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("yourdatabase");
db.setUserName("yourusername");
db.setPassword("yourpassword"); db.open();
db.exec("SET NAMES ’UTF8’");
经过以上四步,就能在Qt程式中直接使用中文字符串,而且能直接使用中文字符串出入于程式和数据库之间
3.连接MySql数据库QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("test"); db.setUserName("root"); db.setPassword("******"); bool ok = db.open();
链接QSLite数据库:QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
4.SELECT操作QSqlQuery query; int numRows; query.exec("SELECT * FROM scores ORDER BY id ASC"); while (query.next()) { QString name = query.value(0).toString();//query.value()的参数只能是index int salary = query.value(1).toInt(); label = setText(QString::number(salary)+name);//测试查询数据的行数if
(db.driver()->hasFeature(QSqlDriver::QuerySize))
{ numRows = query.size(); } else { // this can be very slow st(); numRows = query.at() + 1; } }
5.INSERT操作
(1)直接插入(一条记录)QSqlQuery query;
query.exec("INSERT INTO employee (id, name, salary) VALUES (1001, ’Thad Beaumont’, 65000)");
(2)通过“:字段”操作QSqlQuery query;