Distribution_Service/CC_SDK/Include/CCServlet/CCSQLite3.h

193 lines
5.5 KiB
C
Raw Permalink Normal View History

2025-11-11 17:46:19 +08:00
#ifndef THREADPOOLDEMO_CCSQLITE3_H
#define THREADPOOLDEMO_CCSQLITE3_H
#pragma once
#include "Sys/sqlite3.h"
#include "CCString.h"
#include "vector"
#include "mutex"
#include "CCWebServlet.h"
2026-03-20 09:51:56 +08:00
#ifdef MY_SQL_BOOL
#include "CCMySql.h"
#endif
2025-11-11 17:46:19 +08:00
struct NetSqlInfo {
CTL::String IP = "";
int Port = -1;
CTL::String User = "";
CTL::String Pass = "";
2026-03-20 09:51:56 +08:00
CTL::String DBName = "";
2025-11-11 17:46:19 +08:00
CTL::CORS* CORS_Header = nullptr;
};
/*
2026-03-20 09:51:56 +08:00
* INTEGER:
* REAL:
* NUMERIC:
* TEXT:
* VARCHAR(n):
* DATE:
* TIME:
* DATETIME:
* TIMESTAMP:
* BLOB:
* BOOLEAN: true/false值
*
* SQLite
* CREATE TABLE database_name.table_name(
2025-11-11 17:46:19 +08:00
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype,);
* DROP TABLE database_name.table_name;
* INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
* SELECT * FROM table_name;
* SELECT * FROM table_name WHERE xx='xx';
* UPDATE xxx SET ADDRESS = 'Texas' WHERE xxx = xxx;
* DELETE FROM table_name WHERE xxx=xxx;
*
*/
2026-03-20 09:51:56 +08:00
2025-11-11 17:46:19 +08:00
namespace CTL {
/**
* SQL
*/
struct CCResultSet {
/// 查询结果数据,以 JSON 格式存储
std::vector<JSON> Data;
/// 结果集中行数
int Row = 0;
/// 结果集中列数
int Col = 0;
/// 操作是否成功标志
bool Flag = false;
String Error = "";
};
struct CCSqlSet {
bool Flag = false;
String Error = "";
};
/**
* SQLite3
*/
class SQLite3 {
struct ClientInfo_tSQL {
int ID = -1;
String Code = "";
};
public:
SQLite3() = default;
~SQLite3() = default;
/**
*
*
* @param Path
*/
SQLite3(CTL::String Path);
/**
*
*
* @param Path
* @return
*/
bool Open(CTL::String Path);
/**
*
*
* @param Host
* @return
*/
bool Open(const NetSqlInfo& Host);
/**
*
*
* @return
*/
bool Close();
/**
* INSERTUPDATEDELETE
*
* @param sql SQL
* @return
*/
CCSqlSet SqlUpdate(CTL::String sql);
/**
*
*
* @param sql SQL
* @return
*/
CCResultSet SqlQuery(CTL::String sql);
/**
*
*
* @return
*/
CTL::String GetError();
2026-03-20 09:51:56 +08:00
sqlite3* GetSqlite() const;
2025-11-11 17:46:19 +08:00
private:
sqlite3* SQL; ///< SQLite 数据库连接指针
char *zErrMsg = nullptr; ///< 错误信息指针
bool RemoteLink = false,LinkStatus = false,Blockage = false;
ClientInfo_tSQL ClientInfo;
std::mutex mutex; ///< 线程同步互斥锁
NetSqlInfo M_Host;
CTL::Thread M_Thread;
CTL::Timer timer;
WebSocketClient ws;
String zErrMsgStr = "";
/**
* SQL
*
* @param sql SQL
* @param callback
* @param a
* @return
*/
bool SQlite(const char* sql, int(*callback)(void*, int, char**, char**) = NULL, void* a = NULL);
/**
*
*
* @param str
* @return
*/
2026-03-20 09:51:56 +08:00
static bool containsDecimal(const std::string &str);
static bool is_int(const std::string &str);
2025-11-11 17:46:19 +08:00
/**
*
*
* @tparam T
* @param str
* @return
*/
template<typename T>
T convert(const std::string &str);
void OnOpen(CTL::WebSocketInfo& info);
void OnMessage(CTL::WebSocketInfo& info);
void OnClose(const CTL::WebSocketInfo& info);
void OnError(const CTL::WebSocketInfo& info);
};
template<typename T>
T SQLite3::convert(const std::string &str) {
if (containsDecimal(str)) {
return std::stod(str);
}
else {
return std::stoi(str);
}
}
}
#endif