1、QT中调用MySQL中的一个实例
#include <QSql/qsqldatabase.h>
#include <QSql/qsqlquery.h>
#include
<QSql/qsqldriver.h>
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //
使用mysql数据库驱动
db.setHostName("localhost");
db.setDatabaseName("test"); // 我们之前建立的数据库
db.setUserName("root"); // 我们创建的 yunfan 用户名
db.setPassword("123"); // yunfan 用户的密码
bool ok = db.open(); // 尝试连接数据库
if(ok) { // 这里用yunfan已经成功连上数据库
QSqlQuery query; // 新建一个查询的实例
if(query.exec("select * from t_customer")){ //
尝试列出 employee 表的所有记录
// 本次查询成功
int numRows = 0; //
询问数据库驱动,是否驱动含有某种特性
if(db.driver()->hasFeature(QSqlDriver::QuerySize)){
numRows =
query.size(); // 如果支持结果影响的行数,那么直接记录下来
} else {
query.last(); //否则定位到结果最后,qt 文档说,这个方法非常慢
numRows =
query.at() + 1;
}
QString id, lname, fname,
phone;
QDateTime dob;
display.append("===========================================");
display.append(QString::fromLocal8Bit(" account | password | cname
| cbalance"));
display.append("--------------------------------------");
while(query.next()) { //
定位结果到下一条记录
id =
query.value(0).toString();
//lname =
QString::fromLocal8Bit(query.value(1).toByteArray());
//fname =
QString::fromLocal8Bit(query.value(2).toByteArray());
//dob =
query.value(3).toDateTime();
//phone =
QString::fromLocal8Bit(query.value(4).toByteArray());
QString
result = id ;//+ " " + fname + lname + " " + (dob.toString()) + "
"+phone;
display.append(result);
}
display.append("============================================");
display.append(QString("totally %1 rows").arg( numRows));
} else { // 如果查询失败,用下面的方法得到具体数据库返回的原因
QSqlError error =
query.lastError();
display.append("From mysql
database: " + error.databaseText());
}
} else{ // 打开数据库失败,显示数据库返回的失败描述
display.append("cannot open database.");
display.append("Reason: " +
db.lastError().databaseText());
}
这只是其中一部分核心代码.
2、Linux下解决QT中调用MySQL中的乱码的方法
这种方法应该是最快捷解决中文乱码的办法了,不用改mysql的编码,仅限于linux下使用:
1.在QT程序的main.cpp的main函数中QTextCodec```那三句:
int main(int argc, char
*argv[])
{
QApplication
a(argc,
argv);
QTextCodec
*codec =
QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
MainWindow
w;
w.show();
return
a.exec();
}
2.在你的程序代码设置数据库后添加一句: db.exec("SET NAMES
'Latin1'"); //直接使用数据库的latin1编码
3、在编译时出现undefined reference to
'QSqlDatabase::defaultConnection'
解决方法一:
在.pro文件中加一句话: QT+=sql;
解决方法二:
INCLUDEPATH +=
/usr/local/Trolltech/QtEmbedded-4.6.3/include/QtSql
LIBS+=-lQtSql
加载中,请稍候......