通过昨晚和几天早上的学习,掌握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);
}
}