#include int main(int argc, char **argv)
{
QApplication app(argc, argv);
QTextEdit display;
display.resize(400, 160);
display.show();
// 下面进行数据库的设置
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动
db.setHostName("localhost");
db.setDatabaseName("example"); // 我们之前建立的数据库
db.setUserName("yunfan"); // 我们创建的 yunfan 用户名
db.setPassword("password"); // yunfan 用户的密码
bool ok = db.open(); // 尝试连接数据库
if(ok){ // 这里用yunfan已经成功连上数据库
QSqlQuery query; // 新建一个查询的实例
if(query.exec("select * from employee")){ // 尝试列出 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(" id | 姓名 | 生日 | 电话"));
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());
}
QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));
return app.exec();
}