转帖地址:http://blog.csdn.net/microsky2813/archive/2010/03/02/5338040.aspx
一直没接触数据库,前一阵突然有机会用了用MySQL,顺手把SQL语法学了一遍,学完了手痒痒,一想Qt可以
结合数据库,就顺便试了下Qt链接数据库与使用SQL
SQL部分就不说了
Qt先说链接部分
1.先做数据库驱动,现在Qt SDk for windows里面已经有ODBC的驱动了,我当时现做了个MySQL的驱动(其实我当时是没看见有ODBC),
因为我使用MinGW,所以先使用remip.exe把MySQL/opt里面的 LibMySQL.lib转成.a(使用MSVC的就可以跳过这步了)
然后再进qt/src/plugins/sqldriver/mysql 编译出驱动
QMAKE -o Makefile "INCLUDEPATH+=MYSQL/INCLUDE" "LIBS+=MYSQL/LIB/OPT/libmysql.a" mysql.pro
注意下qmake的参数就行了 再make, 这部分网上说的很详细,
2.Qt使用SQL
主要是下面的几个类
QSqlDatabase 建立于数据库的链接
QSqlQuery 用于执行SQL语句
QSqlTableModel 结合QTableView可以输出数据库的表
贴下我写的简单Demo
QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"/*"QODBC"*/); // becomes the new default connection
db.setUserName("root");//用户名
db.setPassword("password");//密码
db.setHostName("localhost");
db.setDatabaseName("test");//数据库名
db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1");//使用SSL
db.setPort(3306);//端口
if(db.open()){
qDebug()<<"open/n"<<db.lastError().driverText()<<"/n";
}
else{
qDebug()<<"open faile/n";
}
QSqlQuery query;//用于执行SQL语言
query.exec("show databases");//很方便的
while (query.next()) {
qDebug()<<query.value(0).toString()<<"/n";
}
QSqlTableModel *model = new QSqlTableModel;//间接将数据库表装入QTableView
model->setTable("people"); //表名
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
//model->removeColumn(0); // don't show the ID
//model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Age"));
model->setHeaderData(2, Qt::Horizontal, tr("Sex"));
QTableView *view = new QTableView(this);
view->setModel(model);
db.close();
QGridLayout * gl=new QGridLayout();
gl->addWidget(view);
this->setLayout(gl);