加载中…
个人资料
xiaochao
xiaochao
  • 博客等级:
  • 博客积分:0
  • 博客访问:523
  • 关注人气:13
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

QT的MySQL的使用方法和错误

(2013-10-04 11:10:45)
标签:

杂谈

分类: Qt

 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

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有