创建一个新的项目,带ui,(Widget)
在.pro文件中加上sql,如图
在类的.cpp中加上两个头文件
#include
#include
#include
#include
当你加上这一句:
qDebug()<<QSqlDatabase::drivers();
这里我们用QMYSQL
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //数据库对象
//连接数据库
db.setHostName("127.0.0.1"); //数据库服务器IP
db.setUserName("root"); //数据库用户名
db.setPassword("123456"); //数据库密码
db.setDatabaseName("info"); //使用哪个数据库
判断数据库是否连接成功同时打开数据库
if( !db.open() ){ //数据库打开失败
QMessageBox::warning(this,"错误",db.lastError().text());
return;
}
(记住,这里要把libmysql.dll库放进QT的bin文件里,否则会弹出找不到)
下面的百度云网盘里有libmysql。dll的库:
链接:https://pan.baidu.com/s/1vXhscnLRZtI1XhQH8oZaOw
提取码:y7h7
加个头文件:
#include
创建代码:
QSqlQuery query;
query.exec("create table student(id int primary key auto_increment, name varchar(255), age int, score int);");
会发现数据库成功创建出一个student的表
创建表一次就行,或者你事先在mysql创建好了则不用再创建了。
QSqlQuery query;
query.exec("insert into student(id, name, age, score) values(1, 'mike', 18, 59);");
加上头文件
#include
#include
//odbc风格
//预处理语句
//?相当于占位符
query.prepare("insert into student( name, age, score) values(?,?,?);");
//给字段设置内容 list
QVariantList nameList;
nameList<<"xiaoming"<<"xiaolong"<<"xiaojiang";
QVariantList ageList;
ageList<<11<<22<<33;
QVariantList scoreList;
scoreList<<59<<69<<79;
//给字段绑定相应的值,按顺序绑定
query.addBindValue(nameList);
query.addBindValue(ageList);
query.addBindValue(scoreList);
//执行预处理命令
query.execBatch();
第二种风格(个人推荐这个)
//oracle风格
//占位符 : + 自定义名字
query.prepare("insert into student( name, age, score) values(:name,:age,:score);");
QVariantList nameList;
nameList<<"xiaoa"<<"xiaob"<<"xiaoc";
QVariantList ageList;
ageList<<33<<44<<55;
QVariantList scoreList;
scoreList<<89<<90<<100;
//给字段绑定
query.bindValue(":name",nameList);
query.bindValue(":score",scoreList);
query.bindValue(":age",ageList);
//执行预处理命令
query.execBatch();
到.ui文件中
将界面设为
修改按钮名字。buttonCancel,buttonDel,buttonSure;
右击删除,然后转到槽,选第一个。
void Widget::on_buttonDel_clicked()
{
//获取行编辑内容
QString name = ui->lineEdit->text();
QString sql = QString("delete from student where name = '%1';").arg(name);
//开启一个事务
QSqlDatabase::database().transaction();
QSqlQuery query;
query.exec(sql);
}
其他两个也一样的操作;
void Widget::on_buttonSure_clicked()
{
//确定删除
QSqlDatabase::database().commit();
}
void Widget::on_buttonCancel_clicked()
{
//回滚,撤销
QSqlDatabase::database().rollback();
}
更新数据用update student set score = 90 where id = 3;
编译运行即可实现删除数据。
query.exec("select*from student");
while(query.next()){ //一行一行遍历
//取出当前行的内容
qDebug()<<query.value(0).toInt()
<<query.value(1).toString()
<<query.value("age").toInt()
<<query.value("score").toInt();
}
query.exec("select*from student where name = 'xiaoa");
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
#include
#include
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//打印QT支持的数据库驱动
qDebug()<<QSqlDatabase::drivers();
//添加MYSQL数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //数据库对象
//连接数据库
db.setHostName("127.0.0.1"); //数据库服务器IP
db.setUserName("root"); //数据库用户名
db.setPassword("holdworld000312"); //数据库密码
db.setDatabaseName("slimes"); //使用哪个数据库
//打开数据库
if( !db.open() ){ //数据库打开失败
QMessageBox::warning(this,"错误",db.lastError().text());
return;
}
//传入
QSqlQuery query;
//query.exec("insert into student(id, name, age, score) values(1, 'mike', 18, 59);");
//批量插入
//odbc风格
//预处理语句
//?相当于占位符
// query.prepare("insert into student( name, age, score) values(?,?,?);");
// //给字段设置内容 list
// QVariantList nameList;
// nameList<<"xiaoming"<<"xiaolong"<<"xiaojiang";
// QVariantList ageList;
// ageList<<11<<22<<33;
// QVariantList scoreList;
// scoreList<<59<<69<<79;
// //给字段绑定相应的值,按顺序绑定
// query.addBindValue(nameList);
// query.addBindValue(ageList);
// query.addBindValue(scoreList);
// //执行预处理命令
// query.execBatch();
//oracle风格
//占位符 : + 自定义名字
// query.prepare("insert into student( name, age, score) values(:name,:age,:score);");
// QVariantList nameList;
// nameList<<"xiaoa"<<"xiaob"<<"xiaoc";
// QVariantList ageList;
// ageList<<33<<44<<55;
// QVariantList scoreList;
// scoreList<<89<<90<<100;
// //给字段绑定
// query.bindValue(":name",nameList);
// query.bindValue(":score",scoreList);
// query.bindValue(":age",ageList);
// //执行预处理命令
// query.execBatch();
query.exec("select*from student where name = 'xiaoa';");
while(query.next()){ //一行一行遍历
//取出当前行的内容
qDebug()<<query.value(0).toInt()
<<query.value(1).toString()
<<query.value("age").toInt()
<<query.value("score").toInt();
}
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_buttonDel_clicked()
{
//获取行编辑内容
QString name = ui->lineEdit->text();
QString sql = QString("delete from student where name = '%1';").arg(name);
//开启一个事务
QSqlDatabase::database().transaction();
QSqlQuery query;
query.exec(sql);
}
void Widget::on_buttonSure_clicked()
{
//确定删除
QSqlDatabase::database().commit();
}
void Widget::on_buttonCancel_clicked()
{
//回滚,撤销
QSqlDatabase::database().rollback();
}
先建立一个.db文件
创建一个新项目。
在.pro文件中加上sql
.cpp文件和上面的类似,但是不用连接密码和账户(是开源的)。
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
#include
#include
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//打印QT支持的数据库驱动
qDebug()<<QSqlDatabase::drivers();
//添加MYSQL数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //数据库对象
//设置数据库
db.setDatabaseName("../info.db");
//打开数据库
if( !db.open() ){ //数据库打开失败
QMessageBox::warning(this,"错误",db.lastError().text());
return;
}
QSqlQuery query;
query.exec("create table student(id int primary key, name varchar(255), age int, score int);");
// ?相当于占位符
query.prepare("insert into student( name, age, score) values(?,?,?);");
//给字段设置内容 list
QVariantList nameList;
nameList<<"xiaoming"<<"xiaolong"<<"xiaojiang";
QVariantList ageList;
ageList<<11<<22<<33;
QVariantList scoreList;
scoreList<<59<<69<<79;
//给字段绑定相应的值,按顺序绑定
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(1).toString()
<<query.value("age").toInt()
<<query.value("score").toInt();
}
}
Widget::~Widget()
{
delete ui;
}