The QTableView control in Qt calls sql for simple arrangement
1. Create a public method
private:
QSqlDatabase m_db;
1)打开数据库
void SqlToolWnd::onInitDBConn()
{
m_db = QSqlDatabase::addDatabase("QSQLITE");
m_db.setDatabaseName("sfclient.db");
if(!m_db.open())
{
qDebug() << "Error: Failed to connect database." << m_db.lastError();
}
}
2. Close the database
void SqlToolWnd::ExitConn()
{
m_db.close();
}
3. Create a data table
void SqlToolWnd::on_createPushButton_clicked()
{
onInitDBConn();
QSqlQuery sql_query;
if(!sql_query.exec("create table student(id int primary key, name text, sex text)"))
{
qDebug() << "Error: Fail to create table."<< sql_query.lastError();
}
else
{
qDebug() << "Table created!";
}
ExitConn();
}
4. Increase data records
void SqlToolWnd::on_addPushButton_clicked()
{
onInitDBConn();
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable(QString::fromLocal8Bit("学生表"));
model->select();
int row = model->rowCount();
model->insertRows(row,1);
model->setData(model->index(row,0), "1900010105003");
model->setData(model->index( row,1),QString::fromLocal8Bit("Liu Bei"));
model->setData(model->index(row,2),QString::fromLocal8Bit("Male"));
model->setData(model-> index(row,3), "1886-02-20");
model->setData(model->index(row,4),QString::fromLocal8Bit("Military Application Department"));
model->setData(model ->index(row,5),QString::fromLocal8Bit("Military Management Science"));
model->setData(model->index(row,6), "01");
model->submitAll();
ui->tableView->setModel(model);
ExitConn();
}
5. Delete data
void SqlToolWnd::on_deletePushButton_clicked()
{
onInitDBConn();
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable(QString::fromLocal8Bit("学生表"));
SqlParamDlg paramDlg;
if(QDialog::Accepted == paramDlg.exec())
{
if(!paramDlg.m_param.isEmpty())
{
QString sParam = QString(QString::fromLocal8Bit("学生表.'学号'='%1'")).arg(paramDlg.m_param);
qDebug()<<sParam;
model->setFilter(sParam);
model->select();
if(model->rowCount()==1)
{
model->removeRows(0,1);
model->submitAll();
}
}
else
{
QString sParam = QString::fromLocal8Bit("学生表.'性别'='男'");
qDebug()<<sParam;
model->setFilter(sParam);
model->select();
if(model->rowCount()>0)
{
model->removeRows(0,model->rowCount());
model->submitAll();
}
}
}
else
{
ExitConn();
return;
}
ui->tableView->setModel(model);
ExitConn();
}
6. Modify data table records
void SqlToolWnd::on_modifyPushButton_clicked()
{ onInitDBConn(); QSqlTableModel *model = new QSqlTableModel(this); model->setTable(QString::fromLocal8Bit("Configuration")); SqlParamDlg paramDlg; if(QDialog::Accepted == paramOption.exec()) { if(!paramOption.m_param.isEmpty()) { QString sParam = QString(QString::fromLocal8Bit("Default settings.'location'='%1'; ")).arg(paramSelection.
record.setValue(QString::fromLocal8Bit("Name"),QString::fromLocal8Bit("Xiahou Dun"));
model->setRecord(0,record);
model->submitAll();
}
}
}
else
{ ExitConn() ; return; }
ui->tableView->setModel(model);
ExitConn();
}
7. Query data table records
void SqlToolWnd::on_SelectPushButton_clicked()
{
onInitDBConn();
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable(QString::fromLocal8Bit("学生表"));
SqlParamDlg paramDlg;
if(QDialog::Accepted == paramDlg.exec())
{
if(!paramDlg.m_param.isEmpty())
{
QString sParam = QString(QString::fromLocal8Bit("学生表.'姓名'='%1'")).arg(paramDlg.m_param);
qDebug()<<sParam;
model->setFilter(sParam);
}
else
{
model->setFilter("");
}
}
else
{
ExitConn();
return;
}
model->select();
ui->tableView->setModel(model);
ExitConn();
}
Description: The QTableView control provides a convenient access to the sql interface. This article simply writes one of the various solutions, which facilitates the operation of sql.
Solution 1: Use the QSqlQuery constructor to operate the database
QSqlQuery query;
query.exec("select Name, Salary FROM Employee where Salary > 1000");
while (query.next())
{
QString Name = query.value(0).toString();
int Salary = query.value(1).toInt();
qDebug() << Name << Salary;
}
Solution 2: Use QSqlQuery and prepare, bindValue
QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) " "VALUES (:id, :name, :salary)");
query.bindValue(":id", 10001);
query.bindValue(":name", "Tom");
query.bindValue(":salary", 8500);
query.exec();
Solution 3: Use QSqlQuery and prepare, addBindValue
QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) " "VALUES (:id, :name, :salary)");
query.addBindValue(10001);
query.addBindValue("Tom");
query.addBindValue(8500);
query.exec();
Solution 4: QSqlQueryModel and setQuery, setHeaderData operation data table
QSqlQueryModel *model = new QSqlQueryModel(ui->tableView);
model->setQuery("select * from student");
model->setHeaderData(0,Qt::Horizontal,QObject::tr("name"));
model->setHeaderData(1,Qt::Horizontal,QObject::tr("score"));
ui->tableView->setModel(model);