强强的个人技术博客 医技科室软件(PACS, RIS)码农

[QT]Qt 连接 Sqlite数据库

Qt 连接 Sqlite数据库 的方法


核心使用类:

QSqlDatabase:提供了一个接口,用于通过连接访问数据。QSqlDatabase的一个实例表示连接。该连接通过受支持的数据库驱动程序之一提供对数据库的访问,该驱动程序派生自QSqlDriver。

QSqlError:可以显示数据操作的错误

QSqlQuery:用来执行DML(数据操作语言)语句,如SELECT、INSERT、UPDATE和DELETE,以及DDL(数据定义语言)语句等.

1、如果我们有大串数据需要导入时,也可以使用prepare()来绑值,然后再通过bindValue()向绑值加入数据

2、使用exec()函数来执行对应的操作语句


使用方法:

一,项目文件增加 sql

QT       += core gui sql


二、连接数据库

 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件
    if(!db.open()){
        QMessageBox::warning(this,"错误",db.lastError().text());
        return ;
    }
    db.close();


三、新建数据表

 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件
    if(!db.open()){
        QMessageBox::warning(this,"错误",db.lastError().text());
        return ;
    }
    QSqlQuery query(db);
    //创建一个students表,标题分别为id、name、score、class
    query.exec("CREATE TABLE students ("
                       "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                       "name VARCHAR(40) NOT NULL, "
                       " score INTEGER NOT NULL, "
                       "class VARCHAR(40) NOT NULL)");
    qDebug()<<"表创建完成";
    db.close();



四、插入一条记录

  QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件
    if(!db.open()){
        QMessageBox::warning(this,"错误",db.lastError().text());
        return ;
    }
    QSqlQuery query(db);
    //创建一个students表,标题分别为id、name、score、class
    query.exec("insert into students(name,score,class) values('测试',85,'一三班')");
    qDebug()<<"记录插入成功";
    db.close();

五、批量插入数据

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件
    if(!db.open()){
        QMessageBox::warning(this,"错误",db.lastError().text());
        return ;
    }
    QSqlQuery query(db);
    QStringList names;
    names<<"小A"<<"小B"<<"小C"<<"小D"<<"小E"<<"小F"<<"小G"
               <<"小H"<<"小I"<<"小G"<<"小K"<<"小L"<<"小M"<<"小N";

    QStringList clases;
    clases<<"初1-1班"<<"初1-2班"<<"初1-3班"<<"初2-1班"
             <<"初2-2班"<<"初2-3班"<<"初3-1班"<<"初3-2班"<<"初3-3班";

    query.prepare("INSERT INTO students (name, score,class) "
                      "VALUES (:name, :score, :class)");
                        //为每一列标题添加绑定值

    foreach (QString name, names)       //从names表里获取每个名字
    {
        query.bindValue(":name", name);                      //向绑定值里加入名字
        query.bindValue(":score", (qrand() % 101));      //成绩
        query.bindValue(":class", clases[qrand()%clases.length()] );    //班级
        query.exec();               //加入库中
        qDebug()<< name <<" 记录插入成功";
     }
     db.close();


六、查询记录

 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件
    if(!db.open()){
        QMessageBox::warning(this,"错误",db.lastError().text());
        return ;
    }
    QSqlQuery query(db);
    //创建一个students表,标题分别为id、name、score、class
    query.exec("select * from students");
    while(query.next()){
        QString id = query.value(0).toString();
        QString name = query.value(1).toString();
        QString score = query.value(2).toString();
        QString classs = query.value(3).toString();
        qDebug()<< id <<"  " << name <<"  " << score <<"  " << classs;
    }
    db.close();



七:修改记录:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(QApplication::applicationDirPath()+"/scootes.dat"); //如果目录下没有文件,会自动创建文件
    if(!db.open()){
        QMessageBox::warning(this,"错误",db.lastError().text());
        return ;
    }
    QSqlQuery query(db);
    //修改记录
    query.prepare("update students set name=:name where id=18");
    query.bindValue(":name", "修改名称");
    query.exec();
    qDebug()<<"记录修改成功";
    db.close();


2023年10月10日 | 发布:强强 | 分类:QT | 评论:0

发表留言: