LoginSignup
1
4

More than 1 year has passed since last update.

Drogon (web frame work) を使ってみた C++

Last updated at Posted at 2021-09-11

Drogon

C++のウェブフレームワーク Drogon を使ってみたので感想などなど
フレームワークのリンクは以下に貼っておきます。

これ使って(バックエンドのみ)作ったサイトは以下になります。

所感

普通に使いやすかった。
バックエンドとして使用するには十分。(基本的にバックエンドとしてしか使ってないので)
ほかのライブラリーの導入もしやすかった。CMakeファイルを理解する勉強になった。
ソースコードの内部でデータベースのテーブル定義とかはできない。(外部モジュールを利用すれば可能かも)
テーブルは独自にSQLクライアントを使って作っておく必要あり。
対応データベースはPostgreSQLMySQLSqlite3
macOSだとMySQLではmariaDBを使うことになる。

遭遇したエラー1

https://drogon.docsforge.com/master/database-general/database-dbclient/#execsqlasync
にあるような感じで

auto f = clientPtr->execSqlAsyncFuture(R"(insert into questions (user_id,title,text) values (2, "'", "'"))","default");

テーブルに値を追加するとき、
(titleとtextはchar型のカラム)シングルクォーテーションを追加するとtitleのカラムだけ'default'という値に変わってしまう。textはちゃんとシングルクォーテーションが挿入される。

MySQLクライアントで以下のような挿入をすると正しく実行されるのにも関わらず

>> insert into questions (user_id,title,text) values (2, "'", "'");

原因

例に従って末尾に書いていた"default"という文字。

auto f = clientPtr->execSqlAsyncFuture(R"(insert into questions (user_id,title,text) values (2, "'", "'"))","default");

execSqlAsyncFutureの内部で問題が起きている。

解決方法

末尾の"defaul"を削除する

auto f = clientPtr->execSqlAsyncFuture(R"(insert into questions (user_id,title,text) values (2, "'", "'"))");

遭遇したエラー2

前述したようなSQL文では、ダブルクォーテーションを挿入するとエラーになる。

原因

MySQLのシーケンス文字を追加していないから

解決方法

正規表現を使って、シーケンス文字を挿入するべき文字にシーケンス文字を添付する
詳細はほかの記事にまた書く。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4