一,前言
最近看了下架构的演变,从独立式->MCV->SOA->微服务。而我现在做个单机版的工具的话,顶多用到数据库和多线程,我的小工具应该会选MCV架构。将来有必要再扩展以太网联机多人操作功能。那么这都需要用到数据库。
二,常用数据库软件选型
10年前我对SQL语法还是很熟悉的,主键,外键等都很清晰,但是当时用的是access。现在基于win10的SQL可视化软件有哪些呢!网上搜索了下mysql和sqlite用的多。但是mysql的可视化编辑器免费版本少。所以我折腾了下,也算是安装完成了。
于是用QT连接mysql,结果显示驱动不可用。我网上搜索了下,也有解决方案,但是比较麻烦。所以我选用sqlite,QT已经集成的,只是sqlite的可视化工具我一开始没找到,后来折腾了下找到了SQlite Expert Personal是个人免费版,已经满足我的编辑及可视化要求了。
那么QT连接数据库,最终我选择轻量级的Sqlite数据库,它不需要连接,直接是个db文件。
三,QT数据库方法API
void Widget::initDB()
{
//建立并打开数据库
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
qDebug()<<QApplication::applicationDirPath();
database.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "testApple.db");
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
qDebug() << "Succeed to connect database." ;
}
//创建表格
QSqlQuery sql_query;
//先清空一下表,可按需添加此句
sql_query.exec("DROP TABLE student");
//创建表格student
if(!sql_query.exec("create table student(UserId int primary key, UserName text, PassWord text)"))
{
qDebug() << "Error: Fail to create table."<< sql_query.lastError();
}
else
{
qDebug() << "Table created!";
}
// 填充表
if(!sql_query.exec("INSERT INTO student VALUES(1, 'AppleCai', '23')"))
{
qDebug() << "Error: Fail to create table."<< sql_query.lastError();
}
else
{
qDebug() << "add one created!";
}
// 批量填充表
QStringList names;
names<<"小A"<<"小B"<<"小C"<<"小D"<<"小E"<<"小F"<<"小G"<<"小H"<<"小I";
QStringList password;
password<<"11"<<"12"<<"13"<<"21"
<<"22"<<"23"<<"31"<<"32"<<"33";
// 绑定关键字后才能进行操作
sql_query.prepare("INSERT INTO student (UserId, UserName,PassWord) "
"VALUES (:UserId, :UserName, :PassWord)");
qint8 i=0;
foreach (QString name, names) //从names表里获取每个名字
{
sql_query.bindValue(":UserId", i+2); //向绑定值里加入名字
sql_query.bindValue(":UserName", name); //成绩
sql_query.bindValue(":PassWord", password[i] ); //班级
if(!sql_query.exec())
{
qDebug() << "Error: Fail."<< sql_query.lastError();
}
i++;
}
// 读取sqlite
studentInfo tmp;
QVector<studentInfo> infoVect; //数据库缓存
sql_query.exec("SELECT * FROM student WHERE UserId >= 5 AND UserId <= 9;");
while(sql_query.next())
{
tmp.UserId = sql_query.value(0).toInt();
tmp.UserName = sql_query.value(1).toString();
tmp.PassWord = sql_query.value(2).toString();
qDebug()<<tmp.UserId<<tmp.UserName<<tmp.PassWord;
infoVect.push_back(tmp);
}
qDebug("done");
//更改表中数据
sql_query.prepare("UPDATE student SET PassWord='admin' WHERE UserName='AppleCai'");
if(!sql_query.exec())
{
qDebug() << "Error: Fail."<< sql_query.lastError();
}
//删除表中数据
sql_query.prepare("DELETE FROM student WHERE UserName='小H'");
if(!sql_query.exec())
{
qDebug() << "Error: Fail."<< sql_query.lastError();
}
}
四,效果
image.png五,小结
数据库环境搭建成功,QT访问sqlite数据的基本方法算是掌握了。QT数据库已入门。
网友评论