在qt6使用sqlite3

qt6内置的sqlite

lib

导入静态库

#pragma comment(lib, "Qt6Sql.lib")

query data

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQueryModel>

首先,设置数据库类型;然后,打开数据库;最后,关联TableView。

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

open db

先设置数据库名,再打开db。

db.setDatabaseName("SerialComm.db");
db.open();

model-view

先建立Query对象,再设置Sql语句。

QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery("SELECT * FROM com1");

最后,设置关联。

ui.tableView->setModel(model);

qt6 sqlite3 demo

src

QtSqlite3Demo.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>QtSqlite3DemoClass</class>
 <widget class="QMainWindow" name="QtSqlite3DemoClass">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>600</width>
    <height>400</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>QtSqlite3Demo</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QPushButton" name="btnSearch">
    <property name="geometry">
     <rect>
      <x>290</x>
      <y>30</y>
      <width>75</width>
      <height>24</height>
     </rect>
    </property>
    <property name="text">
     <string>Search</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>30</y>
      <width>251</width>
      <height>22</height>
     </rect>
    </property>
   </widget>
   <widget class="QTableView" name="tableView">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>81</y>
      <width>561</width>
      <height>241</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>600</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources>
  <include location="QtSqlite3Demo.qrc"/>
 </resources>
 <connections/>
</ui>

QtSqlite3Demo.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtSqlite3Demo.h"
#include <QtWidgets/QMessageBox>

class QtSqlite3Demo : public QMainWindow
{
    Q_OBJECT

public:
    QtSqlite3Demo(QWidget *parent = Q_NULLPTR);

private slots:
	void sqlite_search();

private:
    Ui::QtSqlite3DemoClass ui;
};

QtSqlite3Demo.cpp

#include "QtSqlite3Demo.h"
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQueryModel>

#pragma comment(lib, "Qt6Sql.lib")

QtSqlite3Demo::QtSqlite3Demo(QWidget* parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	//
	connect(ui.btnSearch, SIGNAL(clicked()), this, SLOT(sqlite_search()));
}

void QtSqlite3Demo::sqlite_search()
{
	QString strDbName = ui.lineEdit->text();

	QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

	QString dbPath = qApp->applicationDirPath() + "/" + strDbName;

	db.setDatabaseName(dbPath);
	if (!db.open()) {
		QMessageBox::critical(nullptr, QObject::tr("Cannot open database"),
			QObject::tr("Unable to establish a database connection.\n"
				"Click Cancel to exit."), QMessageBox::Cancel);
	}

	QSqlQueryModel* model = new QSqlQueryModel;
	model->setQuery("SELECT * FROM com1");

	ui.tableView->setModel(model);
}

Reference