一. 数据库操作
1.MySql驱动编译
在windows系统中,我们在mingw,MySql5和Qt4的环境中编译MySql驱动主要有以下几个步骤:
(1)下载 [url]http://www.qtcn.org/download/mingw-utils-0.3.tar.gz[/url];
(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,分别执行以下命令:
在windows系统中,我们在mingw,MySql5和Qt4的环境中编译MySql驱动主要有以下几个步骤:
(1)下载 [url]http://www.qtcn.org/download/mingw-utils-0.3.tar.gz[/url];
(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)接下来执行以下命令:
(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 <QtSql>就可以操作数据库了。
2.彻底解决数据库存储中文和Qt程序显示数据库中文及中文字符串的问题
(1)数据库和表以及表里的字符相关字段(varchar, char, text等)都要使用gbk_chinese_ci这种方式,不这样做也可以,但这样做,会省很多麻烦。
(2)重新编译Qt的MySQL驱动,需要修改src / sql / drivers / mysql / qsql_mysql.cpp文件。要修改的部分如下:第一百零八行的codec函数
(1)数据库和表以及表里的字符相关字段(varchar, char, text等)都要使用gbk_chinese_ci这种方式,不这样做也可以,但这样做,会省很多麻烦。
(2)重新编译Qt的MySQL驱动,需要修改src / sql / drivers / mysql / qsql_mysql.cpp文件。要修改的部分如下:第一百零八行的codec函数
static QTextCodec* codec(MYSQL* mysql)
|
(3)然后,重新编译qt的mysql驱动在Qt程序main函数中app后面开头处加入下面三句,加上这三个是省得不必要的麻烦
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
|
(4)在Qt数据库连接后,运行"SET NAMES 'UTF8'"语句或"SET NAMES 'GBK'"。
db = QSqlDatabase::addDatabase("QMYSQL");
|
经过以上四步,就可以在Qt程序中直接使用中文字符串,而且可以直接使用中文字符串出入于程序和数据库之间
3.连接MySql数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
|
4.SELECT操作
QSqlQuery query;
|
5.INSERT操作
(1)直接插入
(1)直接插入
QSqlQuery query;
|
(2)通过“:字段”操作
QSqlQuery query;
|
(3)通过“?”操作
QSqlQuery query;
|
6.UPDATE操作
QSqlQuery query;
|
7.DELETE操作
QSqlQuery query;
|
8.transaction()操作
有时为了执行一系列复杂的操作,使用QSqlDatabase::transaction()可以加快速度
有时为了执行一系列复杂的操作,使用QSqlDatabase::transaction()可以加快速度
//database为QSqlDatabase对象
{
|
注意,如果str为中文字符串,在SQL语句中需要标明’str’(用单引号括起),如果是英文或数字字符串,可以不加单引号(指的是包含在双引号内的SQL语句)
9.使用SQL Model类
QSqlQueryModel——一个只读的读取数据库数据的模型
QSqlTableModel——一个可读写的单一表格模型,可以不用写SQL语句
QSqlRelationalTableModel——QSqlTableModel的一个子类
这些类都继承于QAbstractTableModel,而它们又都继承于QAbstractItemModel
(1) QSqlQueryModel的使用
QSqlQueryModel——一个只读的读取数据库数据的模型
QSqlTableModel——一个可读写的单一表格模型,可以不用写SQL语句
QSqlRelationalTableModel——QSqlTableModel的一个子类
这些类都继承于QAbstractTableModel,而它们又都继承于QAbstractItemModel
(1) QSqlQueryModel的使用
QSqlQueryModel querymodel;
}
|
(2) QSqlTableModel的使用
① 读取数据
① 读取数据
QSqlTableModel tablemodel; tablemodel.setTable("scores");
|
② 修改数据
QSqlTableModel tablemodel;
|
③ 删除数据
tablemodel.removeRows(row, 5);
|
④ 插入数据
QSqlRecord record = tablemodel.record();
|
10.使用QTableView
开头处要使用#include <QTableView>
开头处要使用#include <QTableView>
QTableView *view = new QTableView();
|
转载于:https://blog.51cto.com/liuming3385/148764