在使用SQL语句的时候,先在识别SQL语句的环境中写好,再复制过去,之前就因为create 少写了个字母,查了近半小时的时间,才查出来。
项目工程目录:
database.pro
#-------------------------------------------------
#
# Project created by QtCreator 2019-07-12T07:31:08
#
#-------------------------------------------------
QT += core gui sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = 01_database
TEMPLATE = app
SOURCES += main.cpp\
mywidget.cpp
HEADERS += mywidget.h
FORMS += mywidget.ui
mywidget.h:
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private slots:
void on_buttonDelete_clicked();
void on_buttonSure_clicked();
void on_buttonCancel_clicked();
private:
Ui::MyWidget *ui;
};
#endif // MYWIDGET_H
mywidget.cpp:
#include "mywidget.h"
#include "ui_mywidget.h"
#include
#include
#include
#include
#include //专门对SQL语句操作的类
#include
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
//打印Qt支持的数据库驱动
qDebug()<<:drivers>
//添加MySql数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//连接数据库
db.setHostName("127.0.0.1");//数据库服务器IP
db.setUserName("root");//数据库用户名
db.setPassword("123");//密码
db.setDatabaseName("studentmanager");//使用哪个数据库
//打开数据库 只有打开数据库才能进行下面的操作: 增 删 改 查
if(db.open() == false)
{
QMessageBox::warning(this,"错误",db.lastError().text());
return;
}
/*
QSqlQuery query;
query.exec("create table student(id int primary key auto_increment,name varchar(255) ,age int ,score int )");//这里添加SQL语句创建表
*/
#if 0
/*当存在添加多个库的时候,
*
*/
QSqlDatabase db1 = QSqlDatabase::addDatabase("QMYSQL","a");
//连接数据库
db.setHostName("127.0.0.1");//数据库服务器IP
db.setUserName("root");//数据库用户名
db.setPassword("123");//密码
db.setDatabaseName("text");//使用哪个数据库
//打开数据库
if(db.open() == false)
{
QMessageBox::warning(this,"错误",db.lastError().text());
return;
}
QSqlQuery query1(db1);//将db1传进query
query1.exec("create table student(id int primary key auto_increment,name varchar(255) ,age int ,score int )");//创建表
#endif
//插入
QSqlQuery query;
query.exec("insert into student(id ,name, age,score) values (1,'mike',18,59);");
/*批量插入 ,有两种风格*/
#if 0
//odbc风格
//1、预处理语句 ?相当于占位符(此时还不知道里面要填什么内容,先占位置)
QSqlQuery query1;
query1.prepare("insert into student(name, age,score) values (?,?,? );");
//给字段设置内容 list
QVariantList nameList;
nameList <
QVariantList ageList;
ageList <<11<<22<<33;
QVariantList scoreList;
scoreList<<59<<69<<79;
//给字段绑定相应的值 按顺序绑定(否则会出错)
query1.addBindValue(nameList);
query1.addBindValue(ageList);
query1.addBindValue(scoreList);
//执行预处理命令
query1.execBatch();
#endif
#if 0
//oracle 风格
//占位符 : + 自定义名字
QSqlQuery query2;
query2.prepare("insert into student(name, age,score) values (:name,:age,:score );");
//给字段设置内容 list
QVariantList nameList;
nameList <
QVariantList ageList;
ageList <<12<<22<<32;
QVariantList scoreList;
scoreList<<52<<62<<72;
//给字段绑定 这里就没有顺序了
query2.bindValue(":name",nameList);
query2.bindValue(":score",scoreList);
query2.bindValue(":age",ageList);
//执行预处理命令
query1.execBatch();
#endif
/*查找元素
*/
QSqlQuery query4;
query4.exec("select * from student");
//query4.exec("select * from student where name = "xiao1");//选择确定的某一个人
while(query4.next())//一行一行的遍历
{
//取出当前行的内容
qDebug()<
<
<
<
}
}
MyWidget::~MyWidget()
{
delete ui;
}
//删除按钮
void MyWidget::on_buttonDelete_clicked()
{
//获取编辑区的内容
QString name = ui->lineEdit->text();
QString str = QString("delete from student where name = '%1';").arg(name);//删除数据库语句:delete from student where name = 'mike';
//开启一个事务 通过database()函数可以确定操作哪一个数据库
QSqlDatabase::database().transaction();
QSqlDatabase query3;
query3.exec(str);
}
//确定删除
void MyWidget::on_buttonSure_clicked()
{
//确定删除
QSqlDatabase::database().commit();
}
void MyWidget::on_buttonCancel_clicked()
{
//回滚,撤销
QSqlDatabase::database().rollback();
}
mywidget.ui: