通过昨晚和几天早上的学习,掌握QT数据库的相关操作

必须要在pro文件中添加  Qt += sql;

首先,需要与数据库进行连接

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
 
db.setHostName("127.0.0.1");
 
db.setDatabaseName("test");
 
db.setUserName("root");
 
db.setPassword("123456");
 
db.setPort(3306);

也就是创建了一个名字叫做test的数据库,随后需要在数据库中建立一个表

QString str = QString("create table student1(name varchar(32), num int, score double);");
 
QSqlQuery query;
 
query.exec(str);

创建完成之后,就可以进行插入,修改,删除,查询等操作了


首先是插入数据库,基本语句如下:


insert into student1(name,num,score) values ('%1',%2,%3)

然后是删除的语句:


select *from student1 where name = '%1'


修改的语句:


update student1 set num = '%1',score = '%2' where name = '%3'


随后补充一些在数据库中的操作语句

1、创建数据库

create database 数据库名;

2、查看数据库

show databases;

3、选择指定数据库

use 数据库名;

4、删除数据库

drop database 数据库名;

注:自动删除MySQL安装目录中的“C:/AppServ/MySQL/data”文件夹。

三、操作MySQL数据表

1、创建表

create table 表名 (column_name column_type not null,...)

create table语句的属性说明

属性

说明

属性

说明

column_name

字段名

Primary key

该列是否为主码

column_type

字段类型

AUTO_INCREMNT

该列是否自动编号

Not null | null

该列是否允许为空

 

 

 

 

 

 

创建数据表后,“C:\AppServ\MySQL\data\数据库名\”中自动创建对应表文件(“表名.frm”,“表名.MYD”,“表名.MYI”)

2、查看数据库中的表

show tables;

3、查看数据库中所有的表

show tables;(前提是使用use database 数据库;)

4、查看数据表结构

describe 表名;

5、修改数据表结构

alter table 表名

add [column] create_definition [first | after column_name]  //添加新字段
  add primary key (index_col_name,...)  //添加主码名称
  alter [column] col_name {set default literal |rop default}  //修改字段名称
  change [column] old_col_name create_definition  //修改字段名及类型
  modify [column] create_definition  //修改字段类型
  drop [column] col_name  //删除字段
  drop primary key  //删除主码
  rename [as] new_tablename  //更改表名
eg:alter table Admin_Info
    drop A_Pwd,
    rename as Admin_Info2;

6、删除指定数据表

drop table 表名;

四、操作MySQL数据

1、添加表数据

语法1:insert into 表名 values(值1,值2,...)(自增长的列应写null)

语法2:insert into 表名(字段1,字段2,...) values (值1,值2,...)

语法3:insert into 表名 set 字段1=值1,字段2=值2,...

2、更新表数据

update 表名 set 字段1=值1 where 查询条件

若无查询条件,表中所有数据行都会被修改。

3、删除表数据

delete from 表名 where 查询条件

若无查询条件,表中所有数据行都会被删除。

4、查询表数据

select * from 表名;

5、限制查询记录数

select * from 表名 limit[start] length

start:表示从第几行记录开始输出,0表示第1行

 

最后附上完整代码

#include "widget.h"
 
#include "ui_widget.h"
 
#include <QTextCodec>
 
#include <QMessageBox>
 
#include <QtSql/QSqlDatabase>
 
#include <QSqlQuery>
 
 
 
Widget::Widget(QWidget *parent) :
 
QWidget(parent),
 
ui(new Ui::Widget)
 
{

 
ui->setupUi(this);
 
 
 
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());//设置显示中文
 
setWindowTitle("春春数据库");
 
 
 
 
 
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
 
db.setHostName("127.0.0.1");
 
db.setDatabaseName("test");
 
db.setUserName("root");
 
db.setPassword("123456");
 
db.setPort(3306);
 
 
 
 
 
if(!db.open()) //弹出窗口
 
{

 
QMessageBox::warning(this, "警告", "数据库打开失败");
 
}
 
else
 
{

 
ui->textEdit->setText("数据库打开成功");
 
}
 
 
 
QString str = QString("create table student1(name varchar(32), num int, score double);");
 
QSqlQuery query;
 
query.exec(str);
 
 
 
 
 
 
 
 
 
}
 
 
 
Widget::~Widget()
 
{

 
delete ui;
 
}
 
 
 
void Widget::on_pushButton_clicked()
 
{

 
QString name = ui->lineEdit->text();
 
int num = ui->lineEdit_2->text().toInt();
 
double scole = ui->lineEdit_3->text().toDouble();
 
QString str = QString("insert into student1(name,num,score) values ('%1',%2,%3) ").arg(name).arg(num).arg(scole);
 
QSqlQuery query;
 
query.exec(str);
 
 
 
ui->lineEdit->clear();
 
ui->lineEdit_2->clear();
 
ui->lineEdit_3->clear();
 
 
 
ui->textEdit->setText("插入数据成功");
 
 
 
}
 
 
 
void Widget::on_pushButton_4_clicked()
 
{

 
QString searchname = ui->lineEdit->text();
 
 
 
if(searchname == NULL)
 
{

 
ui->textEdit->setText("你想搜索哪一个人");
 
 
 
}
 
else
 
{

 
QString str = QString("select *from student1 where name = '%1'").arg(searchname);
 
QSqlQuery query;
 
query.exec(str);
 
QString name;
 
int num;
 
double scole;
 
 
 
while(query.next())
 
{

 
name = query.value(0).toString();
 
num = query.value(1).toInt();
 
scole = query.value(2).toDouble();
 
 
 
}
 
if(name == NULL)
 
{

 
ui->textEdit->setText("查无此人");
 
ui->lineEdit->clear();
 
ui->lineEdit_2->clear();
 
ui->lineEdit_3->clear();
 
}
 
else
 
{

 
ui->lineEdit->setText(name);
 
ui->lineEdit_2->setText(QString().setNum(num));
 
ui->lineEdit_3->setText(QString().setNum(scole));
 
ui->textEdit->setText("查询成功");
 
 
 
}
 
}
 
}
 
 
 
 
 
void Widget::on_pushButton_2_clicked()
 
{

 
QString name = ui->lineEdit->text();
 
if(name == NULL)
 
{

 
ui->textEdit->setText("请输入想要删除的名字");
 
 
 
}
 
else
 
{

 
QString str = QString("select *from student1 where name = '%1'").arg(name);
 
QSqlQuery query;
 
query.exec(str);
 
QString deletename;
 
while(query.next())
 
{

 
deletename = query.value(1).toString();
 
}
 
if(deletename == NULL)
 
{

 
ui->textEdit->setText("没有这个人");
 
ui->lineEdit->clear();
 
ui->lineEdit_2->clear();
 
ui->lineEdit_3->clear();
 
 
 
}
 
else
 
{

 
QString str = QString("delete from student1 where name = '%1'").arg(name);
 
QSqlQuery query;
 
query.exec(str);
 
ui->lineEdit->clear();
 
ui->lineEdit_2->clear();
 
ui->lineEdit_3->clear();
 
ui->textEdit->setText("删除成功");
 
 
 
}
 
}
 
}
 
 
 
void Widget::on_pushButton_3_clicked()
 
{

 
QString name = ui->lineEdit->text();
 
int num = ui->lineEdit_2->text().toInt();
 
double score = ui->lineEdit_3->text().toDouble();
 
if(name == NULL)
 
{

 
ui->textEdit->setText("请输入想要删除的名字");
 
 
 
}
 
else
 
{

 
QString str = QString("update student1 set num = '%1',score = '%2' where name = '%3'").arg(num).arg(score).arg(name);
 
QSqlQuery query;
 
query.exec(str);
 
ui->lineEdit->clear();
 
ui->lineEdit_2->clear();
 
ui->lineEdit_3->clear();
 
ui->textEdit->setText("修改成功");
 
}
 
 
 
}
 
 
 
 
 
void Widget::on_pushButton_5_clicked()
 
{

 
QString name[100];
 
int num[100];
 
double score[100];
 
int i = 0;
 
QString str = QString("select *from student1");
 
QSqlQuery query;
 
query.exec(str);
 
 
 
while(query.next())
 
{

 
name[i] = query.value(0).toString();
 
num[i] = query.value(1).toInt();
 
score[i] = query.value(2).toDouble();
 
i++;
 
}
 
ui->textEdit->clear();
 
int j = 0;
 
for(j = 0; j < i; j++)
 
{

 
QString str = QString("学号:%1  姓名:%2  成绩:%3").arg(name[j]).arg(num[j]).arg(score[j]);
 
ui->textEdit->append(str);
 
}
 
 
 
}