1,SQLITE是一个静态数据库,不需要服务器,在嵌入式编程使用的特别多,因为是开源的。

     ODBC是Windows封装好的数据库的一些接口。

2,Qt中数据库的连接,已经数据库的基本操作(建表,选择,批量插入等)的伪代码如下

#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>//对数据库操作的类
#include <QVariantList>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //打印QT支持的数据库驱动
    qDebug() << QSqlDatabase::drivers();
    //添加MySql数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    //连接数据库
    db.setHostName("127.0.0.1");//数据库服务器IP
    db.setUserName("root");//数据库用户名
    db.setPassword("123456");//密码
    db.setDatabaseName("info");//数据那个数据库
    
    //打开数据库
    if(!db.open()){//数据库打开失败
        QMessageBox::warning(this, "错误", db.lastError().text());
        return;
    }
    
    QSqlQuery query;
    query.exec("在这里直接写SQL语句即可");
    
    //如果SQL里面是select语句时,
    while(query.next()){//一行一行的遍历
        //取出当前的内容
        qDebug() << query.value(0).toInt()//第一列
                 << query.value("age");//第二列,两种方法,下面的更直观
    }
    
    //当一个项目中使用多个数据库时
    QSqlDatabase db1 = QSqlDatabase::addDatabase("QMYSQL", "a");//连接名的使用方法,如果使用了了连接名就
                                                                //必须要在41行创建query1对象时把数据库名字传进去
    db1.setHostName("127.0.0.1");//数据库服务器IP
    db1.setUserName("root");//数据库用户名
    db1.setPassword("123456");//密码
    db1.setDatabaseName("test");//使用哪个数据库
    
    //打开数据库
    if(!db1.open()){//数据库打开失败
        QMessageBox::warning(this, "错误", db.lastError().text());
        return;
    }
    
    QSqlQuery query1(db1);//必须把数据库名字穿进去,才能执行41行,原因见34行注释
    query1.exec("在这里写SQL语句即可");
    
    //批量插入,odbc风格,预处理语句,?相当于占位符
    query.prepare("insert into student(name, age, score) values(?, ?, ?)");
    //给字段设置内容 list
    QVariantList nameList;
    nameList << "xiaoming" << "xiaoli" << "xiaoan";
    QVariantList ageList;
    ageList << 11 << 22 << 33;
    QVariantList scoreList;
    scoreList << 80 << 90 << 100;
    //给字段绑定相应的值,需要按顺序绑定,否则会插入不成功
    query.addBindValue(nameList);
    query.addBindValue(ageList);
    query.addBindValue(scoreList);
    //执行预处理命令,即可完成批量插入
    query.execBatch();
    
    //批量插入, oracle风格,和上面的只是占位符不一样
    query1.prepare("insert into student(name, age, score) values(:name, :age, :score)");
    //给字段设置内容 list
    QVariantList nameList;
    nameList << "xiaoming" << "xiaoli" << "xiaoan";
    QVariantList ageList;
    ageList << 11 << 22 << 33;
    QVariantList scoreList;
    scoreList << 80 << 90 << 100;
    //给字段绑定
    query1.bindValue(":name", nameList);
    query1.bindValue(":age" ,ageList);
    query1.bindValue(":score" ,scoreList);
    //执行预处理命令,即可完成批量插入
    query1.execBatch();  
    
}

3,Qt中的QSqlLite和QMySql的区别,不用设置主机Ip,用户名,密码等,因为sqllite是本地的静态数据库,只需要执行下面两句就可以了,其他的操作和上面的相同。

    //添加SqlLite数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    //设置数据库
    db.setDatabaseName("../info.db");  

4,数据库的可视化——QT中的Model-View控件。

    其中Model只有一个功能,那就是存储数据,然后通过View类将数据显示出来。伪代码如下:

//设置模型
    model = new QSqlTableModel(this);
    model -> setTable("student");//指定使用哪个表
    
    //把model放在view里面
    ui -> tableView -> setModel(model);
    
    //显示model里的数据
    model -> select();
    //修改表的名字
    model -> setHeaderData(0, Qt::Horizontal, "学号");

 这种东西只是开发快一些,不会sql的程序员都可以开发,要想提高自己的技术应该尽量不用这种东西。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐