前言:
本篇记录下,如何简单查询下数据库的内容,并不会深入太多
一、创建CUTELYST项目
找一个空白目录,注意不能有中文或空格,执行如下命令
#创建应用
cutelyst3-qt5.exe --create-app myapp
#进入应用目录
cd myapp
#创建名为"Books"的控制器
cutelyst3-qt5.exe --controller Books
注:一定要进入应用的目录,否则创建控制器会出现异常
通过执行cutelyst命令创建名为”Site”的控制器,将创建一个src/site.cpp和src/site.h文件,但笔者发现,这两个文件没什么可看的,并且需要手工注册这个控制器
二、修改源码并编译
使用QtCreator打开并配置工程,
1.修改CMakeLists.txt工程文件,以查找QtSql
- find_package(Qt5 COMPONENTS Core Network)
+ find_package(Qt5 COMPONENTS Core Network Sql)
1.修改src/CMakeLists.txt工程文件
target_link_libraries(Hello
...
Cutelyst::View::Grantlee # Add this line
Cutelyst::Utils::Sql # Add this line
Qt5::Sql # Add this line
...
}
2.创建Grantlee视图、注册并实例化控制器
修改src/myapp.cpp
...
#include "books.h"
#include
#include
#include
...
bool myapp::init()
{
...
auto view = new GrantleeView(this);
view->setIncludePaths({ pathTo("root/src") });
new Books(this);
...
}
将模板文件的基本目录从root更改为root/src
在src/books.h中,加入如下公有函数,用于浏览器查询时使用
C_ATTR(list, :Local)
void list(Context *c);
注:测试方法上的”Local”属性。这将导致在”控制器/方法”URL上执行测试操作 ,本例是”books/list”
在src/books.cpp中,添加实现
void Books::list(Context *c)
{
QSqlQuery query = CPreparedSqlQueryThreadForDB("SELECT * FROM book", "MyDB");
if (query.exec()) {
c->setStash("books", Sql::queryToHashList(query));
}
c->setStash("template", "books/list.html");
}
默认情况下,Grantle将尝试呈现一个遵循命名模式”controller/method.html”的模板,我们在这里遵循该模式。但是,在其他情况下,需要指定模板文件
变量”books”放置数据查询结果,以便在模板中使用。
3.创建数据库连接
使用QtSql,我们可以一次打开到数据库的连接,并在应用程序的生命周期内重复使用它,但需要注意的是,在派生新进程之前,不能打开它,否则所有子进程将共享相同的连接,并且行为未定义。
将virtual _postFork()_方法添加到主应用程序类中,如果数据库无法打开,则可以在主应用程序类中返回false:
// myapp.h
public:
...
virtual bool postFork() override;
// myapp.cpp
...
#include
#include
...
bool MyApp::postFork()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", Sql::databaseNameThread("MyDB"));
db.setDatabaseName("myapp.db");
db.setConnectOptions("foreign_keys = ON");
if (!db.open()) {
qCritical() << "Failed to open database:" << db.lastError().text();
return false;
}
return true;
}
完成后,直接编译,可以得到生成的动态库
windows下是myapp.dll
linux下是libmyapp.so
二、运行新的动态库
1.创建一个root/src/books/list.html模板文件。以下是一个简单的示例:
{% comment %}This is a Grantlee comment.{% endcomment %}
{% comment %}Some basic HTML with a loop to display books{% endcomment %}
TitleRatingAuthor(s)
{% comment %}Display each book in a table row{% endcomment %}
{% for book in books %}
{{ book.title }}
{{ book.rating }}
{% endfor %}
2.创建sqlite数据库
SQL命令创建sqlite数据库myapp.db,SQL如下
`sql
PRAGMA foreign_keys = ON;
CREATE TABLE book (
id INTEGER PRIMARY KEY,
title TEXT ,
rating INTEGER
);
— ‘book_author’ is a many-to-many join table between books & authors
CREATE TABLE book_author (
book_id INTEGER REFERENCES book(id) ON DELETE CASCADE ON UPDATE CASCADE,
author_id INTEGER REFERENCES author(id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (book_id, author_id)
);
CREATE TABLE author (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT
);
Original: https://blog.csdn.net/aggs1990/article/details/123942290
Author: ꧁白杨树下꧂
Title: Qt+Cutelyst学习笔记(十五)win10+Qt5.15.2+sqlite 访问数据库数据
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816276/
转载文章受原作者版权保护。转载请注明原作者出处!