;
查看现有的数据库
使用mydata数据库,use mydata;
4、数据库中创建一个表格
// 创建一个对象,用于操作mysql的sql语句,实现操作mysql
QSqlQuery query;
// 创建表格student
query.exec("create table student(id int primary key auto_increment,name varchar(255),age int, score int);");
这里使用的QSqlQuery对象使用mysql语句,简介操作数据库;
5、往表格中批量插入数据
批量插入数据,方法1
// 批量插入数据
// obdc风格;
// 预处理语句
// ? 相当于占位符
query.prepare("insert into student(name,age,score) values(?,?,?)"); // 使用这条sql语句,实现插入数据,这里使用占位符号实现批量插入数据
// 给字段设置内容
QVariantList nameList;
nameList<<"LiHua"<< "XiaoMing"<<"Liuwei";
QVariantList ageList;
ageList << 21<< 23<< 24;
QVariantList scoreList;
scoreList << 76<< 68<< 85;
// 给字段绑定相应的值 按顺序绑定,否则失败
query.addBindValue(nameList);
query.addBindValue(ageList);
query.addBindValue(scoreList);
// 执行预处理命令
query.execBatch();
批量插入数据,方法2
// 批量插入数据
// oracle风格
// 站位符 :+自定义名字
query.prepare("insert into student(name,age,score) values(:name,:age,:score)");
// 字段设置内容
QVariantList nameList;
nameList<< "小白"<< "乐乐"<< "欢欢";
QVariantList ageList;
ageList << 43<< 45<< 44;
QVariantList scoreList;
scoreList << 56<< 75<< 84;
// 字段绑定内容 与绑定顺序无关
query.bindValue(":name", nameList);
query.bindValue(":score",scoreList );
query.bindValue(":age",ageList);
// 执行预处理命令
query.execBatch();
插入数据完成后,查询下,刚才插入的数据
6、数据事物:
在执行数据库操作之前,比如插入、删除等操作之前,可以先创建一个事务,事务以后的删除、插入等操作可以恢复到操作之前的状态;
// 删除数据
void Widget::on_btnDel_clicked()
QString name = ui->lineEdit->text();
QString sql = QString("delete from student where name = '%1'").arg(name);
// 开启一个事物,事物以后的操作都可以撤消
QSqlDatabase::database(); // 获取数据库
db.transaction(); // == QSqlDatabase::database().transaction();
QSqlQuery query;
query.exec(sql); // 删除数据
// 确认删除
void Widget::on_btnSure_clicked()
// 确认删除
db.commit();
// 撤消删除数据
void Widget::on_btnCancel_clicked()
// 回滚 ,撤消删除的数据
QSqlDatabase::database(); // 获取数据库
db.rollback(); // 这里语句执行成功,但是数据回复失败,在命令行下删除、撤消数据都可以
在命令行下册数数据库事务:
select * from student; // 查看student表中的所有数据
start transaction; // 开启一个事务
delete from student where name ="乐乐"; // 删除表中的数据
rollback; // 回滚,撤消数据
7、数据库遍历
query.exec("select * from student");
//query.exec("select * from student where id = '12'"); // 加过滤
while(query.next()) // 一行一行遍历表格
qDebug() << query.value(0).toInt()
<< query.value("name").toString()
<< query.value("age").toUInt()
<< query.value("score").toInt();
Sqlite数据库操作:
1、创建一个数据库文件info.db,是一个开源的静态的数据库,qt自带有支持;
静态数据库操作:
db = QSqlDatabase::addDatabase("QSQLITE"); // 添加数据库
db.setDatabaseName("info.db"); // 设置数据库名称
// 打开数据库
if(!db.open())
return;
QSqlQuery query;
// 创建表格
query.exec("create table student(id int primary key,name varchar(255),age int, score int)");
// 批量插入数据
// obdc风格;
// 预处理语句
// ? 相当于占位符
query.prepare("insert into student(name,age,score) values(?,?,?)");
// 给字段设置内容
QVariantList nameList;
nameList<<"LiHua"<< "XiaoMing"<<"Liuwei";
QVariantList ageList;
ageList << 21<< 23<< 24;
QVariantList scoreList;
scoreList << 76<< 68<< 85;
// 给字段绑定相应的值 按顺序绑定,否则失败
query.addBindValue(nameList);
query.addBindValue(ageList);
query.addBindValue(scoreList);
// 执行预处理命令
query.execBatch();
query.exec("select * from student");
while(query.next())
qDebug() << query.value(0).toInt()
<< query.value("name").toString()
<< query.value("age").toUInt()
<< query.value("score").toInt();
View Code