-
背景
最近在學習《深入應(yīng)用C++11: 代碼優(yōu)化與工程級應(yīng)用》,其中第13章說到SQLite庫,查詢網(wǎng)上諸多教程,發(fā)現(xiàn)比較容易出現(xiàn)bug且配置較為麻煩,故記錄此次簡化版方案,以供參考。 -
軟件環(huán)境
SQLite 3.42.0 版本(僅下載Source code即可)
VSCode+CMake+SQLite Viewer -
VSCode + SQLite文件目錄
(注:僅需左側(cè)紅色框內(nèi)容,其余均為編譯生成結(jié)果)文章來源:http://www.zghlxwxcb.cn/news/detail-621986.html -
測試代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-621986.html
#include<iostream>
#include<string>
#include"sqlite3.h"
using namespace std;
bool test_sqlite() {
sqlite3* db_handle = nullptr;
int result = sqlite3_open("test.db", &db_handle);
if(result != SQLITE_OK) {
sqlite3_close(db_handle);
return false;
}
// create table
const char* sql_create = "CREATE TABLE if not exists personTable(ID INTEGER NOT NULL, Name Text, Address Text);";
result = sqlite3_exec(db_handle, sql_create, nullptr, nullptr, nullptr);
// insert data
// create stmt
sqlite3_stmt* stmt = nullptr;
const char* sql_insert = "INSERT INTO personTable(ID, Name, Address) VALUES(?, ?, ?);";
sqlite3_prepare_v2(db_handle, sql_insert, strlen(sql_insert), &stmt, nullptr);
// update data
int id = 1;
const char* name = "Sqlite3";
const char* address = "Database";
sqlite3_bind_int(stmt, 1, id);
sqlite3_bind_text(stmt, 2, name, strlen(name), SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 3, address, strlen(address), SQLITE_TRANSIENT);
sqlite3_step(stmt);
result = sqlite3_exec(db_handle, sql_insert, nullptr, nullptr, nullptr);
// free stmt
sqlite3_finalize(stmt);
// close sqlite
sqlite3_close(db_handle);
return result = SQLITE_OK;
}
int main() {
cout << test_sqlite() << endl;
return 0;
}
- 外層CMakeLists.txt配置
cmake_minimum_required (VERSION 3.0)
PROJECT(sqlite3_demo)
set(CMAKE_BUILD_TYPE Release)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${PROJECT_SOURCE_DIR}/lib)
add_subdirectory(${PROJECT_SOURCE_DIR}/src)
- 內(nèi)層CMakeLists.txt配置
# cmake needs this line
SET(CMAKE_BUILD_TYPE "Release")
add_library(sqlite3 ../include/sqlite3)
add_executable(main main.cpp)
target_link_libraries(main sqlite3)
- 小結(jié)
1)理解了CMake的編譯原理就不在需要諸如sqlite3.def,sqlite3.exe文件,通過手動編譯的方式,自動生成sqlite3.lib,更加實用便捷,且不需要調(diào)用vs studio的lib.exe等命令(需要管理員權(quán)限);
2)SQLite提供了豐富的API,因此手動編譯源碼,方便函數(shù)的查詢和源碼的理解;
3)SQLite的數(shù)據(jù)處理pipeline較為繁瑣,接下來將嘗試書中方法,進行二次封裝簡化。
到了這里,關(guān)于VSCode配置之C++ & SQLite3極簡配置方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!