Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作。通常,Qt 只默认搭载 QSqlite 驱动
如果习惯于使用 SQL 语句,我们可以选择QSqlQuery类;如果只需要使用高层次的数据库接口(不关心 SQL 语法),我们可以选择QSqlTableModel和QSqlRelationalTableModel。
QtSql 是作为 Qt 的一个模块提供的。为了使用有关数据库的类,我们必须早 .pro 文件中添加这么一句:QT+=sql
下面来看一个简单的函数:
-
bool connect(const QString &dbName)
-
{
-
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");/* //创建了一个QSqlDatabase实例 */
-
db.setDatabaseName(dbName); /* sqlite 数据库,只需要指定数据库名字即可数据库连接使用这个的名字进行区分*/
-
-
/* 如果是数据库服务器,比如 MySQL,我们还需要指定主机名、端口号、用户名和密码*/
-
// db.setHostName("host");
-
// db.setDatabaseName("dbname");
-
// db.setUserName("username");
-
// db.setPassword("password");
-
-
if (!db.open()) {
-
/**
-
*QtSql 模块中的类大多具有lastError()函数,用于检查最新出现的错误。
-
*如果你发现数据库操作有任何问题,应该使用这个函数进行错误的检查。
-
*/
-
QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text());
-
return false;
-
}
-
return true;
-
}
接下来我们可以在main()函数中使用这个connect()函数:
-
int main(int argc, char *argv[])
-
{
-
QApplication a(argc, argv);
-
if (connect("demo.db")) {
-
QSqlQuery query;//系统会使用默认连接的数据库进行操作
-
//QSqlQuery query(db);//也可指明是哪一个QSqlDatabase对象数据库,来执行操作
-
if (!query.exec("CREATE TABLE student ("
-
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
-
"name VARCHAR,"
-
"age INT)")) {
-
QMessageBox::critical(0, QObject::tr("Database Error"),
-
query.lastError().text());
-
return 1;
-
}
-
} else {
-
return 1;
-
}
-
return a.exec();
-
}
使用QSqlQuery的方式更灵活,功能更强大,而使用QSqlTableModel则更简单,更方便与 model/view 结合使用
示例代码:
-
int main(int argc, char *argv[])
-
{
-
QApplication a(argc, argv);
-
if (connect("demo.db")) {
-
QSqlTableModel *model = new QSqlTableModel;
-
model->setTable("student"); //使用 student 表
-
model->setSort(1, Qt::AscendingOrder); //选择按照 第一列 排序
-
model->setHeaderData(1, Qt::Horizontal, "Name"); // 设置列头
-
model->setHeaderData(2, Qt::Horizontal, "Age");
-
model->select();
-
-
QTableView *view = new QTableView; //创建QTableView对象作为视图
-
view->setModel(model);
-
view->setSelectionMode(QAbstractItemView::SingleSelection);//
-
view->setSelectionBehavior(QAbstractItemView::SelectRows);
-
// view->setColumnHidden(0, true);
-
view->resizeColumnsToContents();
-
view->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁用编辑功能
-
-
QHeaderView *header = view->horizontalHeader();
-
header->setStretchLastSection(true);
-
-
view->show();
-
} else {
-
return 1;
-
}
-
return a.exec();
-
}
其它请百度参考:
Qt 数据库(一)简介
Qt 数据库(二)添加 MySQL 数据库驱动插件
Qt 数据库(三)利用 QSqlQuery 类执行 SQL 语句(一)
Qt 数据库(四)利用 QSqlQuery 类执行 SQL 语句(二)
Qt 数据库(五)QSqlQueryModel
Qt 数据库(六)QSqlTableModel
Qt 数据库(七)QSqlRelationalTableModel
返回目录:Qt学习整理
阅读(3651) | 评论(0) | 转发(2) |