SQLite数据库创建用户表和智能家居状态表

本示例演示如何使用SQLite数据库创建用户表和智能家居状态表,并提供C++代码示例来演示如何与数据库交互。

1. 创建用户表

CREATE TABLE IF NOT EXISTS users (
    uid INTEGER PRIMARY KEY AUTOINCREMENT,
    username varchar(10), 
    passwd varchar(10)
);
  • users表用于存储用户信息。
  • uid是用户ID,主键,自增。
  • username是用户名,最大长度为10个字符。
  • passwd是用户密码,最大长度为10个字符。

2. 创建智能家居状态表

CREATE TABLE IF NOT EXISTS Status (
    sid INTEGER PRIMARY KEY AUTOINCREMENT,
    uid INTEGER,
    device_name varchar(10),
    device_state varchar(10),
    value varchar(10),
    mode varchar(20),
    FOREIGN KEY (uid) REFERENCES users (uid)
);
  • Status表用于存储智能家居设备的状态信息。
  • sid是状态ID,主键,自增。
  • uid是用户ID,外键关联users表。
  • device_name是设备名称,例如'智能灯','空调'等,最大长度为10个字符。
  • device_state是设备状态,例如'开启'或'关闭',最大长度为10个字符。
  • value是设备状态值,例如亮度值或温度值,最大长度为10个字符。
  • mode是设备当前的模式,例如'日常模式', '睡眠模式'等,最大长度为20个字符。

3. C++代码示例

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>

// 初始化数据库连接
void sqlite_init()
{
    // 先关闭重复的数据库连接
    if (QSqlDatabase::contains('qt_sql_default_connection')) {
        QSqlDatabase::removeDatabase('qt_sql_default_connection');
    }
    QSqlDatabase db = QSqlDatabase::addDatabase('QSQLITE');
    db.setDatabaseName('../Smarthome_Client/database/database.db');
    if(!db.open())
    {
        qDebug() << '无法打开数据库!';
    }
    else{
        qDebug() << '数据库打开成功!';
    }
}

// 更新智能家居状态表中的数据
void updateSmartHomeStatus(int userId, QString deviceName, QString deviceState, QString newValue)
{
    sqlite_init();
    QSqlQuery query;
    QString sql = QString('INSERT INTO Status (uid, device_name, device_state, value) VALUES (%1, '%2', '%3', '%4')')
            .arg(userId).arg(deviceName).arg(deviceState).arg(newValue);
    query.prepare(sql);
    if (!query.exec()) {
        qDebug() << '插入数据失败:' << query.lastError().text();
        return;
    }
}

// 查询用户在状态表中是否存在
bool statusUid(int userId)
{
    sqlite_init();
    QSqlQuery query;
    query.prepare('SELECT * FROM status WHERE user_id = :userId');
    query.bindValue(':userId', userId);
    if (!query.next()) {
        return false;
    } else {
        return true;
    }
}

// 获取用户最后一次设置的模式
QString getLastState(int userid)
{
    sqlite_init();
    QString queryStr = QString('SELECT mode FROM Status WHERE uid = %1  ORDER BY sid DESC LIMIT 1').arg(userid);
    QSqlQuery query;
    if (query.exec(queryStr) && query.next())
    {
        return query.value(0).toString();
    }
    else
    {
        qDebug() << '得到上一次状态错误: ' << query.lastError().text();
        return '';
    }
}

// 更新用户最后一次设置的模式
void updateLastMode(int userid, QString mode, QString device_name)
{
    sqlite_init();
    QString queryStr = QString('UPDATE Status SET mode = '%1' WHERE sid = (SELECT MAX(sid) FROM Status WHERE uid = %2 AND device_name = %3)')
            .arg(mode).arg(userid).arg(device_name);
    QSqlQuery query;
    if (!query.exec(queryStr))
    {
        qDebug() << '更新模式失败: ' << query.lastError().text();
    }
}

注意

  • 以上代码示例使用了Qt框架中的QSqlDatabase, QSqlQuery等类来操作SQLite数据库,需要在项目中添加QT += sql模块。
  • 请根据实际情况修改数据库文件名和路径。
  • device_name字段在更新时应与数据库中的字段名完全一致,否则会导致更新失败。
  • 这只是一个简单的示例,实际应用中需要根据具体需求进行修改和完善。
SQLite数据库创建用户表和智能家居状态表

原文地址: https://www.cveoy.top/t/topic/fC06 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录