zoukankan      html  css  js  c++  java
  • Qt之操作数据库(SQLite)

     

     
        QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持。
        QSqlDatabase对象象征了数据库的关联。Qt使用驱动程序与各种数据库的应用编程接口进行通信。Qt的桌面版(Desktop Edition)包括如下一些驱动程序:
     
     驱动程序  数据库 
     QDB2  IBM DB2 7.1版以及更新的版本 
     QIBASE  Borland InterBase
     QMYSQL  MySql 
     QOCI  甲骨文公司(Oracle Call Interface)
     QODBC   ODBC(包括微软公司的QSL服务)
     QPSQL   PostgreSQL的7.3版以及更高版本 
     QSQLITE  QSLite第3版 
     QSQLITE2  QSLite第2版
     QTDS   Qybase自适应服务器 
        
        由于授权的许可限制,Qt的开源版本无法提供所有的驱动程序,当配置Qt时,即可以选择Qt本身包含的SQL驱动程序,也可以以查件的形式建立驱动程序,公共领域中不断发展的SQLite数据库将向Qt提供支持。
        如下讨论关于Qt进行SQLite的基本操作。
     
    代码如下:
     
    //添加数据库驱动、设置数据库名称、数据库登录用户名、密码
    QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE"); 
    database.setDatabaseName("database.db");
    database.setUserName("root");  
    database.setPassword("123456");
     
    //打开数据库
    if(!database.open())
    {  
    qDebug()<<database.lastError();
    qFatal("failed to connect.") ;
    }
    else
    {
    //QSqlQuery类提供执行和操作的SQL语句的方法。
    //可以用来执行DML(数据操作语言)语句,如SELECT、INSERT、UPDATE、DELETE, 
    //以及DDL(数据定义语言)语句,例如CREATE TABLE。
    //也可以用来执行那些不是标准的SQL的数据库特定的命令。
    QSqlQuery sql_query; 
     
    QString create_sql = "create table student (id int primary key, name varchar(30), age int)";
    QString select_max_sql = "select max(id) from student";
    QString insert_sql = "insert into student values (?, ?, ?)";
    QString update_sql = "update student set name = :name where id = :id";
    QString select_sql = "select id, name from student";
    QString select_all_sql = "select * from student";
    QString delete_sql = "delete from student where id = ?";
    QString clear_sql = "delete from student";
     
    sql_query.prepare(create_sql);
    if(!sql_query.exec())
    {
    qDebug()<<sql_query.lastError();
    }
    else
    {
    qDebug()<<"table created!";
    }
     
    //查询最大id
    int max_id = 0;
    sql_query.prepare(select_max_sql);
    if(!sql_query.exec())
    {
    qDebug()<<sql_query.lastError();
    }
    else
    {
    while(sql_query.next())
    {
    max_id = sql_query.value(0).toInt();
    qDebug()<<QString("max id:%1").arg(max_id);
    }
    }
    //插入数据
    sql_query.prepare(insert_sql);
    sql_query.addBindValue(max_id+1);
    sql_query.addBindValue("name");
    sql_query.addBindValue(25);
    if(!sql_query.exec())
    {
    qDebug()<<sql_query.lastError();
    }
    else
    {
    qDebug()<<"inserted!";
    }
     
    //更新数据
    sql_query.prepare(update_sql);
    sql_query.bindValue(":name", "Qt");
    sql_query.bindValue(":id", 1);
    if(!sql_query.exec())
    {
    qDebug()<<sql_query.lastError();
    }
    else
    {
    qDebug()<<"updated!";
    }
     
    //查询部分数据
    if(!sql_query.exec(select_sql))
    {
    qDebug()<<sql_query.lastError();
    }
    else
    {
    while(sql_query.next())
    {
    int id = sql_query.value("id").toInt();
    QString name = sql_query.value("name").toString();
     
    qDebug()<<QString("id:%1    name:%2").arg(id).arg(name);
    }
    }
     
    //查询所有数据
    sql_query.prepare(select_all_sql);
    if(!sql_query.exec())
    {
    qDebug()<<sql_query.lastError();
    }
    else
    {
    while(sql_query.next())
    {
    int id = sql_query.value(0).toInt();
    QString name = sql_query.value(1).toString();
    int age = sql_query.value(2).toInt();
     
    qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
    }
    }
     
    //删除数据
    sql_query.prepare(delete_sql);
    sql_query.addBindValue(max_id);
    if(!sql_query.exec())
    {
    qDebug()<<sql_query.lastError();
    }
    else
    {
    qDebug()<<"deleted!";
    }
     
    //清空表
    sql_query.prepare(clear_sql);
    if(!sql_query.exec())
    {
    qDebug()<<sql_query.lastError();
    }
    else
    {
    qDebug()<<"cleared";
    }
    }
     
    //关闭数据库
    database.close();
     
    //删除数据库
    QFile::remove("database.db");
     
    可以通过一些工具对SQLite进行管理,如下:
     
    Qt之操作数据库(SQLite)
     
    SQLite的管理
    管理工具挺多的,这里简单介绍几款:
    • SQLite Manager:开放源代码的SQLite管理工具,用来管理本地电脑上的SQLite数据库,可以独立运行(以XULRunner方式),也可以作为Firefox、Thunderbird、Seamonkey、Songbird、Komodo、Gecko等的插件。
    • SQLite Administrator:一个用来管理SQLite数据库文件的图形化工具,可进行创建、设计和管理操作。提供代码编辑器具有自动完成和语法着色,支持中文,适合初学者。
    • SQLite Database browser:一个SQLite数据库的轻量级GUI客户端,基于Qt库开发,界面清洁,操作简单,主要是为非技术用户创建、修改和编辑SQLite数据库的工具,使用向导方式实现。
  • 相关阅读:
    爬虫必备—性能相关(异步非阻塞)
    JPA自定义查询@Query分页
    iiview Select 选择框打勾选中的内容label和展示的不一致
    ivew Table 固定列设置后,底部拖拽的横轴被覆盖拉不动
    vue消息提示Message
    LeafLet之气泡框隐藏"x"图标
    vue 之 折线图挤压
    iView之清空选择框
    iview之select选择框选中内容后有空格的问题
    iview组件select之默认展示label,并传空value做方法入参
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/7068530.html
Copyright © 2011-2022 走看看