SQLite数据库创建用户表和智能家居状态表
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字段在更新时应与数据库中的字段名完全一致,否则会导致更新失败。- 这只是一个简单的示例,实际应用中需要根据具体需求进行修改和完善。
原文地址: https://www.cveoy.top/t/topic/fC06 著作权归作者所有。请勿转载和采集!