一、数据库创建
QT可以访问很多数据库,是由于SQL模块的存在,通过SQL模块可以访问很多数据库。QT里面自带很多SQL的驱动程序,可以直接访问这些数据库,通过接口就可以访问数据库。
整体上讲,SQL模块是分层的,最底层为驱动层,对应我们的数据库。驱动层之上就是SQL的接口层。驱动层直接连接数据库和接口层,成为了接口层和数据库之间的桥梁。接口层就是一些访问函数,用户无法直接操作最底层,只能通过接口层来操作数据库。接口层最重要的就是QSQLDATABASE。接口层之上就是用户接口层,用户接口层将数据库的内容链接到窗口部件上。也就是说有了用户接口层就可以在操作界面上修改数据库里的数据库。(QSql。。。。。Model)
数据库的选定与创建 此处选SQLite3
SQLite3最主要的特点就是轻量型,非常适合嵌入式。
首先要在pro文件里面添加
QT += core gui sql
用如下语句来看QT支持哪些数据库
QStringList drivers;
drivers = QSqlDatabase::drivers();
foreach(QString driver,drivers)
qDebug() << driver;
结果为:
创建数据库的方法为:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//设置接入哪种数据库
db.setDatabaseName("dataset.db");//给数据库命名
if(!db.open())
{
qDebug() << "创建失败 " << db.lastError();//打印出创建失败的原因
}
else
{
qDebug() << "创建成功";
}
二、插入数据库与遍历数据库
需要用到一些语句:参考网络上的语句大全和详细的注释:
https://blog.csdn.net/u011555996/article/details/122792812
使用这些语句一般分为三步,1:创建语句,2:准备语句,3:执行语句
需要包含一个头文件QSQLQuery,来查找列,修改列,添加列,删除列等。
sql里面有属于自己的数据类型,所以不能用QString
首先定义创建的语句
QString create = "create table student(id int,name varchar(20),age int)";
定义好语句就可以开始创建了:
先准备,后执行:
sql_query.prepare(create);
sql_query.exec();
创建好之后就可以开始创建数据了。创建语句,在将语句绑定好,在准备语句,最后执行语句
QString insert_sql = "insert into student values(?,?,?)" ;
sql_query.prepare(insert_sql);
sql_query.addBindValue(1);
sql_query.addBindValue("Misaka");
sql_query.addBindValue(15);//一个?对应一个bindValue
if(!sql_query.exec())
{
qDebug() << "插入执行错误: " << sql_query.lastError();
}
else {
qDebug() << "插入成功";
}
插入好数据以后就可以开始显示这些数据了:
QString select_sql = "select * from student";//把student的全部内容显示出来
sql_query.prepare(select_sql);
if(!sql_query.exec())
{
qDebug() << "查看执行错误: " << sql_query.lastError();
}
else {
while(sql_query.next())//如果下一行数据还存在,就继续执行
{
int id = sql_query.value(0).toInt();//将sql里的int转换为qt里的int
QString name = sql_query.value(1).toString();//将sql里的string转化为qt里的string
int age = sql_query.value(2).toInt();
qDebug() << "id " << id << " name: " << name << " age: " << age;
}
}
三、删除和更新语句
删除表格里的全部内容
QString clear_sql = "delete from student";
sql_query.prepare(clear_sql);
if(!sql_query.exec())
{
qDebug() << "删除错误: " << sql_query.lastError();
}
else {
qDebug() << "删除成功";
}
更新表格里面的内容:
QString update_sql = "update student set name = :nm where id = :n";
//将ID为n的那一行的name换为nm
sql_query.prepare(update_sql);
sql_query.bindValue(":nm", "MiKi");//将nm绑定为MiKi
sql_query.bindValue(":n", "1");//将n绑定为1
sql_query.exec();
删除某一行的内容:
QString delete1_sql = "delete from student where id = ?";
sql_query.prepare(delete1_sql);
sql_query.addBindValue(1);
if(!sql_query.exec())
{
qDebug() << "删除失败";
}
else {
qDebug() << "删除成功";
}
目前为止的代码如下:
链接:https://pan.baidu.com/s/1jTnkpCsBEWrNdliKALJ6_Q
提取码:wod6