qt使用sqlite

sql语句学习链接https://www.w3school.com.cn/sql/sql_syntax.asp

0、准备

pro文件添加sql模块。
在这里插入图片描述
添加对应头文件:

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

1、 QSqlQuery与QSqlDatabase如何关联

当您使用addDatabase创建QSqlDatabase对象时,或者当您调用removeDatabase时,您只是将一个元组(驱动程序,主机名:端口,数据库名称,用户名/密码)关联或取消关联到名称(或默认连接名称,
t指定连接名称)。 SQL驱动程序被实例化,但数据库只有在您调用QSqlDatabase :: open时才会打开。

有兴趣的转细解链接:https://blog.csdn.net/weixin_39732027/article/details/111740896
或者:http://www.voidcn.com/article/p-tpwkcpdx-bsu.html

(1)如果QSqlQuery使用的全局或类成员:

    database = QSqlDatabase::addDatabase(db_type);      //设置数据库类型
    database.setDatabaseName(db_name);
    if (!database.open())
    {
        qDebug()<<Q_FUNC_INFO<<"Error: Failed to connect database!" << database.lastError();
        return 0;
    }
    sql_query = new QSqlQuery(database);	//QSqlDatabase与QSqlQuery关联

(2)如果QSqlQuery为局部变量,也要在创建时关联数据库:

   bool ok ;
   QSqlQuery query(database);	//QSqlDatabase与QSqlQuery关联
   ok = query.exec("delete from PerformanceTestData where "+ filter);
   return ok;

后文QSqlQuery使用的类成员,为前者。

2、建立并打开数据库:

打开myDataBase.db,如果数据库不存在则会创建数据库,设置数据库类型为QSQLITE

     QSqlDatabase database;
     database = QSqlDatabase::addDatabase("QSQLITE");
     database.setDatabaseName("myDataBase.db");
     if (!database.open())
         qDebug() << "Error: Failed to connect database!" << database.lastError();
     else
         qDebug() << "Succeed to connect database!" ;

如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");

关闭数据库

    database.close(); 

3、创建表格TableUserAccount

使用语句CREATE TABLE IF NOT EXISTS TableUserAccount,如果表格不存在才会创建表格。

     QString strUserAccount = QString("CREATE TABLE IF NOT EXISTS TableUserAccount(\
                              ID integer primary key autoincrement, \
                              UserName TEXT, \
                              Password TEXT, \
                              iLevel integer, \
                              strLevel TEXT, \
                              Department TEXT, \
                              DateTime TEXT  )");
     if(!sql_query.exec(strUserAccount ))
         qDebug() << "Error: Fail to create table."<< sql_query.lastError();
     else
         qDebug() << "Table created!";

4、插入数据

语法:INSERT INTO 表名称 VALUES (值1, 值2,…)

   QString strSQL = "INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')";
   if(!sql_query.exec(strSQL ))
       qDebug() << sql_query.lastError();
   else
       qDebug() << "inserted Wang!";

在这里插入图片描述

5、修改数据

语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

     QString strSQL = "UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' ";    
     if(!sql_query.exec(strSQL ))
         qDebug() << sql_query.lastError();
     else
         qDebug() << "updated!";

6、删除数据

语法:DELETE FROM 表名称 WHERE 列名称 = 值

删除表中的某行,下面代码为删除 ‘id’ 列为1的行。

     QString strSQL = "delete from student where id = 1";  
     if(!sql_query.exec(strSQL))
         qDebug()<<sql_query.lastError();
     else
         qDebug()<<"deleted!";

可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的。sql语句如下:

    QString strSQL = "delete from table_name";

7、 删除表格

     sql_query.exec("drop table student"); 
     if(sql_query.exec())
         qDebug() << sql_query.lastError();
     else
         qDebug() << "table cleared";

8、查询数据

     sql_query.exec("select * from student");   
     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);
         }
     }

9、获取数据库中表名

     QStringList tables = database.tables();

10、获取数据库中表的所有字段信息

SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志。

PRAGMA 命令细解:https://www.runoob.com/sqlite/sqlite-pragma.html

封装为如下查询函数(函数只获取了字段名,注释有说明获取字段序号、类型):

QStringList BaseDB::getTableInfo(QString tabNmae)
{
    QStringList indexList;
    QString str = "PRAGMA table_info(" + tabNmae + ")";
    sql_query->prepare(str);
    if (sql_query->exec())
    {
        //sql_query->value(0):indexNum
        //sql_query->value(1):indexName
        //sql_query->value(2):indexType
        while (sql_query->next())
            indexList<<sql_query->value(1).toString();
    }
    else
        qDebug() << sql_query->lastError();
    return indexList;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值