#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QDebug>
#include <QSqlError>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget),db_file("student.db")
{
ui->setupUi(this);
QFile file(db_file);
bool isDbFileExists = false;
if(file.exists()){
isDbFileExists = true;
qDebug()<<"数据库文件"<<db_file<<"已经存在";
}
else{
qDebug()<<"数据库文件"<<db_file<<"不存在";
}
//可指定连接的名称
//addDatabase内可以添加第二个参数
db_student = QSqlDatabase :: addDatabase("QSQLITE");
db_student.setDatabaseName(db_file);
if(db_student.open()){
qDebug()<<"数据库正常打开";
}
else{
qDebug()<<"打开错误";
}
if(!isDbFileExists)
{
//数据库文件不存在,表示该程序是第一次被启动,做数据库初始化以及建表的操作
QSqlQuery sql_query(db_student);
QString sql_str = "create table Student (id varchar(64) PRIMARY KEY , name varchar(64),gender varchar(64),age int)";
if(!sql_query.exec(sql_str)){
qDebug() << "Student table 创建失败 "<<sql_query.lastError().text();
sql_query.lastError().text();
}
//插入方式1
sql_str="insert into Student values('202310160001','张三','一个真正的Man',14 )";
if(!sql_query.exec(sql_str))
{
qDebug()<<"插入学生信息失败1";
qDebug()<<sql_query.lastError().text();
}
//插入方式2,像是使用占位符来插入
sql_str="insert into Student values(?,?,?,? )";
//准备sql语句
sql_query.prepare(sql_str);
sql_query.addBindValue("20201043032");
sql_query.addBindValue("Tom");
sql_query.addBindValue("武装直升机");
sql_query.addBindValue(11);
//判断是否插入成功:
if(!sql_query.exec()){
qDebug()<<"插入学生信息失败";
qDebug()<<sql_query.lastError().text();
}else{
qDebug()<<"插入学生信息成功";
}
//插入方式3,取出具体绑定的对象,使用对应名称来插入
sql_str = "insert into Student values(:id,:name,:gender,:age)";
sql_query.prepare(sql_str);
sql_query.bindValue(":id", "202310160003");
sql_query.bindValue(":name", "GUANXI");
sql_query.bindValue(":gender", "一个真正的Man");
sql_query.bindValue(":age", "18");
if(!sql_query.exec()){
QMessageBox::information(this,"insert","插入失败");
qDebug()<<sql_query.lastError().text();
}else{
QMessageBox::information(this,"slect","插入成功!");
}
}
show_db();
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pb_new_clicked()
{
QSqlQuery sql_query(db_student);
//插入方式3,取出具体绑定的对象,使用对应名称来插入
QString sql_str = "insert into Student values(:id,:name,:gender,:age)";
sql_query.prepare(sql_str);
sql_query.bindValue(":id", ui->le_xh->text());
sql_query.bindValue(":name", ui->le_name->text());
sql_query.bindValue(":gender", ui->le_sex->currentText());
sql_query.bindValue(":age", ui->le_year->text());
if(!sql_query.exec()){
qDebug()<<"插入学生信息失败";
qDebug()<<sql_query.lastError().text();
}else{
qDebug()<<"插入学生信息成功";
}
show_db();
}
void Widget::on_pb_delete_clicked()
{
QSqlQuery sql_query(db_student);
//插入方式3,取出具体绑定的对象,使用对应名称来插入
//?使用addBindValue id = :id
QString sql_str = "DELETE FROM Student WHERE id = ?";
sql_query.prepare(sql_str);
sql_query.addBindValue( ui->le_xh->text());
if(!sql_query.exec()){
qDebug()<<"删除执行失败";
qDebug()<<sql_query.lastError().text();
}else{
qDebug()<<"删除执行成功";
}
show_db();
}
void Widget::on_pb_select_clicked()
{
show_slect(ui->le_xh->text());
}
void Widget::on_pb_modify_clicked()
{
}
void Widget::show_db()
{
//将数据库和sql_query和student关联
QSqlQuery sql_query(db_student);
QString sql_str = "select *from Student";
if(!sql_query.exec(sql_str))
{
qDebug()<<sql_str<<"failed";
qDebug()<<sql_query.lastError().text();
return;
}
ui->te->clear();
while(sql_query.next()){
QString buffer;
buffer += (sql_query.value(0).toString()+" ");
buffer += (sql_query.value(1).toString()+" ");
buffer += (sql_query.value(2).toString()+" ");
buffer += (sql_query.value(3).toString()+" ");
ui->te->append(buffer);
}
}
void Widget::show_slect(QString id)
{
QSqlQuery sql_query(db_student);
sql_query.prepare("SELECT * FROM Student WHERE id = ?");
sql_query.addBindValue(id);
if(!sql_query.exec())
{
qDebug()<<"failed";
qDebug()<<sql_query.lastError().text();
return;
}
ui->te->clear();
if(sql_query.next()){
QString buffer;
buffer += (sql_query.value(0).toString()+" ");
buffer += (sql_query.value(1).toString()+" ");
buffer += (sql_query.value(2).toString()+" ");
buffer += (sql_query.value(3).toString()+" ");
ui->te->append(buffer);
}else{
// 没有查询到数据
QMessageBox::information(this,"slect","查询失败,无该数据");
}
}
注意: