QT5 操作sqlite3数据库(一)

数据库操作需要导入头文件

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

并且需要在pro配置文件中加入
QT += sql

1、数据库需要在整个类的中使用,在头文件**.h**中创建一个数据库

QSqlDatabase database;

2、在c文件中创建数据库连接,如果数据库已经存在则打开,如果不存在则创建一个

if (QSqlDatabase::contains("qt_sql_default_connection"))//判断指定的连接是否存在,存在在返回true,qt_sql_default_connection是QT默认的,可以自己取
{
    database = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
    database = QSqlDatabase::addDatabase("QSQLITE");//QSQLITE是sqlite数据库的对应驱动名称,固定的;addDatabase还有第二个参数就是连接名称,这里默认就是qt_sql_default_connection
    database.setDatabaseName("BMSData.db");//数据库名称,如果不存在则会创建
    database.setUserName("rfnBMS");//设置用户名
    database.setPassword("123456");//设置密码
}

3、创建数据表,并指定表头

QSqlQuery sql_query;
//SQL操作语句create table 表名 (标题头内容)
QString create_sql = "create table student1 (id int primary key, 序列号 varchar(30), 电压 int,电流 int, "
                     "SOC int ,SOH int ,循环次数 int ,系统模式 varchar(30) ,"
                     "充电 varchar(30), 放电 varchar(30), 预充电 varchar(30), 环境温度 int,"
                     " mos温度 int,温度1 int ,温度2 int ,温度3 int,"
                     "BQ34Z100电压 int ,BQ34Z100总电流 int,BQ34Z100平均电流 int,BQ34Z100满充容量 int,"
                     "BQ34Z100设计容量 int ,BQ34Z100化学ID int,BQ34Z100内部温度 int,BQ34Z100外部探头温度 int,BQ34Z100控制状态位 int)";
//执行SQL语句
sql_query.prepare(create_sql);
//如果成功则返回true,否则false
if(!sql_query.exec())
{
    qDebug() << "Error: Fail to create table." << sql_query.lastError();
}
else
{
    qDebug() << "Table created!";
}

4、往指定的数据表中插入数据

    QSqlQuery sql_query;
    //查询当前最大ID
    QString select_max_sql = "select max(id) from student1";
    QString insert_sql = "insert into student1 values (?,?,?,?,  ?,?,?,?,  ?,?,?,?,  ?,?,?,?,  ?,?,?,?, ?,?,?,?,?)";

    //查询最大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(realMonitorStruct.BMSSerialNumber);
    sql_query.addBindValue((float)realMonitorStruct.totalValtoge*0.01);
    sql_query.addBindValue((float)realMonitorStruct.totalElectrity*0.01);

    sql_query.addBindValue((float)realMonitorStruct.SOC*0.02);
    sql_query.addBindValue((float)realMonitorStruct.SOH*0.1);
    sql_query.addBindValue(25);
    sql_query.addBindValue(systemMode);

    sql_query.addBindValue(status[0]);
    sql_query.addBindValue(status[1]);
    sql_query.addBindValue(status[2]);
    sql_query.addBindValue(((float)realMonitorStruct.cellTemp[0]-KAIERWEN)*0.1);

    sql_query.addBindValue(((float)realMonitorStruct.cellTemp[1]-KAIERWEN)*0.1);
    sql_query.addBindValue(((float)realMonitorStruct.cellTemp[2]-KAIERWEN)*0.1);
    sql_query.addBindValue(((float)realMonitorStruct.cellTemp[3]-KAIERWEN)*0.1);
    sql_query.addBindValue(((float)realMonitorStruct.cellTemp[4]-KAIERWEN)*0.1);

    sql_query.addBindValue((float)realMonitorStruct.BQVoltage*0.001);
    sql_query.addBindValue(realMonitorStruct.BQAllEletricity);
    sql_query.addBindValue(realMonitorStruct.BQAveEletricity);
    sql_query.addBindValue(realMonitorStruct.BQFullCapacity);

    sql_query.addBindValue(realMonitorStruct.BQDesigCapacity);
    sql_query.addBindValue(BQID);
    sql_query.addBindValue(((float)realMonitorStruct.BQInserTemp-KAIERWEN)*0.1);
    sql_query.addBindValue(((float)realMonitorStruct.BQOutserTemp-KAIERWEN)*0.1);
    sql_query.addBindValue(BQControlBit);
    if(!sql_query.exec())
    {
        qDebug() << sql_query.lastError();
    }
    else
    {
        qDebug() << "inserted Wang!";
    }

5、在数据表后面增加一个字段:实际上就是执行一下sql的语句

  QString sql1 = "alter table run_data add 序列号 varchar(32)";//这句话就是往run_data的数据表插入一个序列号的字段
  if(!sql_query.exec(sql1)){
      qDebug() << "alter sucess" << sql_query.lastError();
  }else{
      qDebug() << "add alter sucess";
  }
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值