qt实现sql操作,首先在项目文件中加入
QT+=sql
需要的头文件
#include<QDebug>
#include<QDir>
#include<QtSql/QSqlDatabase>
#include<QtSql/QSqlError>
#include<QtSql/QSqlTableModel>
#include<QtSql/QSqlQuery>
在mainwindow.h中定义变量,用于数据库操作
QSqlDatabase db;
QSqlTableModel *model;
int currentSelectRow;
定义数据库初始化函数
bool MainWindow::initDB(){
//加载sqlite驱动
if(QSqlDatabase::contains("qt_sql_default_connection")){
db=QSqlDatabase::database("qt_sql_default_connection");
}else{
db=QSqlDatabase::addDatabase("QSQLITE");
}
//判断数据库文件是否存在
bool dbFile = QFile::exists(QDir::currentPath()+"/mydb.db");
//打开数据库,如果数据库文件不存在会自动建立
db.setDatabaseName(QDir::currentPath()+"/mydb.db");
if(!db.open()){
qDebug()<<"database open error!"<<db.lastError();
return false;
}
QSqlQuery query(db);
//如果未创建过数据库文件,则建立新表
if(!dbFile){
query.exec("CREATE TABLE table_1 ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name text, "
"age integer)"
);
}
model=new QSqlTableModel();
model->setTable("table_1");
model->select();
ui->tableView->setModel(model);
//设置表不可编辑
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
在main函数中引用
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
w.initDB();
return a.exec();
}
在ui编辑器中设计图形界面
选中当前单元格所在的行,并且显示所选数据
void MainWindow::on_tableView_clicked(const QModelIndex &index)
{
currentSelectRow=ui->tableView->currentIndex().row();
ui->tableView->selectRow(currentSelectRow);
//显示选择的数据
ui->lineEdit->setText(model->data(model->index(currentSelectRow,0)).toString());
ui->lineEdit_2->setText(model->data(model->index(currentSelectRow,1)).toString());
ui->lineEdit_3->setText(model->data(model->index(currentSelectRow,2)).toString());
}
定义增加按钮的回调函数,实现数据增加操作
void MainWindow::on_pushButton_2_clicked()
{
int rowNum=model->rowCount();
model->insertRow(rowNum);
model->setData(model->index(rowNum,1),ui->lineEdit_2->text());
model->setData(model->index(rowNum,2),ui->lineEdit_3->text());
model->submitAll();
model->select();
}
定义删除按钮的回调函数,实现数据删除
void MainWindow::on_pushButton_3_clicked()
{
model->removeRow(currentSelectRow);
model->submitAll();
model->select();
}
定义修改按钮的回调函数,实现数据修改
void MainWindow::on_pushButton_4_clicked()
{
model->setData(model->index(currentSelectRow,1),ui->lineEdit_2->text());
model->setData(model->index(currentSelectRow,2),ui->lineEdit_3->text());
model->submitAll();
model->select();
}
定义查询按钮的回调函数,实现对name的模糊查询
void MainWindow::on_pushButton_clicked()
{
if(ui->lineEdit_4->text().isEmpty())
{
model->setFilter("");
}else{
QString str(ui->lineEdit_4->text());
model->setFilter("name like '%"+str+"%'");
}
model->select();
}
效果: