Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7565126
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2013-12-23 16:55:55

Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作。通常,Qt 只默认搭载 QSqlite 驱动

如果习惯于使用 SQL 语句,我们可以选择QSqlQuery类;如果只需要使用高层次的数据库接口(不关心 SQL 语法),我们可以选择QSqlTableModelQSqlRelationalTableModel

QtSql 是作为 Qt 的一个模块提供的。为了使用有关数据库的类,我们必须早 .pro 文件中添加这么一句:QT+=sql

下面来看一个简单的函数:

点击(此处)折叠或打开

  1. bool connect(const QString &dbName)
  2. {
  3.     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");/* //创建了一个QSqlDatabase实例 */
  4.     db.setDatabaseName(dbName); /* sqlite 数据库,只需要指定数据库名字即可数据库连接使用这个的名字进行区分*/

  5.     /* 如果是数据库服务器,比如 MySQL,我们还需要指定主机名、端口号、用户名和密码*/
  6. // db.setHostName("host");
  7. // db.setDatabaseName("dbname");
  8. // db.setUserName("username");
  9. // db.setPassword("password");

  10.    if (!db.open()) {
  11.        /**
  12.         *QtSql 模块中的类大多具有lastError()函数,用于检查最新出现的错误。
  13.         *如果你发现数据库操作有任何问题,应该使用这个函数进行错误的检查。
  14.         */
  15.        QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text());
  16.        return false;
  17.    }
  18.    return true;
  19. }

接下来我们可以在main()函数中使用这个connect()函数:

点击(此处)折叠或打开

  1. int main(int argc, char *argv[])
  2. {
  3.     QApplication a(argc, argv);
  4.     if (connect("demo.db")) {
  5.         QSqlQuery query;//系统会使用默认连接的数据库进行操作
  6.   //QSqlQuery query(db);//也可指明是哪一个QSqlDatabase对象数据库,来执行操作
  7.         if (!query.exec("CREATE TABLE student ("
  8.                         "id INTEGER PRIMARY KEY AUTOINCREMENT,"
  9.                         "name VARCHAR,"
  10.                         "age INT)")) {
  11.             QMessageBox::critical(0, QObject::tr("Database Error"),
  12.                                   query.lastError().text());
  13.             return 1;
  14.         }
  15.     } else {
  16.         return 1;
  17.     }
  18.     return a.exec();
  19. }


使用QSqlQuery的方式更灵活,功能更强大,而使用QSqlTableModel则更简单,更方便与 model/view 结合使用

示例代码:

点击(此处)折叠或打开

  1. int main(int argc, char *argv[])
  2. {
  3.     QApplication a(argc, argv);
  4.     if (connect("demo.db")) {
  5.         QSqlTableModel *model = new QSqlTableModel;
  6.         model->setTable("student"); //使用 student 表
  7.         model->setSort(1, Qt::AscendingOrder); //选择按照 第一列 排序
  8.         model->setHeaderData(1, Qt::Horizontal, "Name"); // 设置列头
  9.         model->setHeaderData(2, Qt::Horizontal, "Age");
  10.         model->select();

  11.         QTableView *view = new QTableView; //创建QTableView对象作为视图
  12.         view->setModel(model);
  13.         view->setSelectionMode(QAbstractItemView::SingleSelection);//
  14.         view->setSelectionBehavior(QAbstractItemView::SelectRows);
  15. // view->setColumnHidden(0, true);
  16.         view->resizeColumnsToContents();
  17.         view->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁用编辑功能

  18.         QHeaderView *header = view->horizontalHeader();
  19.         header->setStretchLastSection(true);

  20.         view->show();
  21.     } else {
  22.         return 1;
  23.     }
  24.     return a.exec();
  25. }
其它请百度参考:
Qt 数据库(一)简介
Qt 数据库(二)添加 MySQL 数据库驱动插件
Qt 数据库(三)利用 QSqlQuery 类执行 SQL 语句(一)
Qt 数据库(四)利用 QSqlQuery 类执行 SQL 语句(二)
Qt 数据库(五)QSqlQueryModel
Qt 数据库(六)QSqlTableModel
Qt 数据库(七)QSqlRelationalTableModel
 
返回目录:Qt学习整理
阅读(3590) | 评论(0) | 转发(2) |
0

上一篇:Qt剪贴板

下一篇:Qt使用流处理 XML

给主人留下些什么吧!~~