typedef struct {
uint timeout;
uint action; // 初始化时设定几次insert后commit
uint action_count; // 记录自上次commit以来经过了多少次insert
pthread_t commit_thread_tid;
pthread_mutex_t commit_thread_lock;
} TransactionRecord;
typedef struct {
sqlite3* db; // sqlite自己的db指针
const char* prefix; // 数据库文件位置, 默认使用./db.db
const char* init_path; // 初始化配置文件位置, 默认使用./init.sql
int max_record_day; // 按日期分库时每个库最多保留几天的数据
bool auto_init;
TransactionRecord* transaction;
} DatabaseConfig;
typedef struct {
int64_t id;
uint8_t* EventCode;
uint8_t* EventType;
uint8_t* EventLevel;
uint16_t* DeviceInfo;
uint8_t* SysStatus;
char* EventTime;
} SystemLog;
typedef struct {
int length;
char* table_name;
char** columns;
uint64_t* offsets;
int* types;
InsertDataList* data;
uint64_t * blob_sizes;
} InsertQueryParam;
int insert_by_table(DatabaseConfig* config, InsertQueryParam* query_param);
int insert_system_log(DatabaseConfig* config, SystemLog* log);
不封装你们要这么调
DatabaseConfig* config = build_default_database_config();
init_database(config);
connect_database(config);
uint8_t a = 0x1F;
uint8_t b = 0xF2;
uint8_t c = 0x2F;
uint8_t d = 0xF3;
SystemLog log1 = {
0,
&a,
&b
};
SystemLog log2 = {
0,
&c,
&d,
};
InsertDataList* data_list = arraylist_create();
arraylist_add(data_list, &log1);
arraylist_add(data_list, &log2);
InsertQueryParam param = {
2,
"system_log",
NULL,
NULL,
NULL,
data_list
};
char* columns[] = { "EventCode", "EventType" };
uint64_t offsets[] = { OFFSETOF(SystemLog, EventCode), OFFSETOF(SystemLog, EventType) };
int types[] = { DATA_TYPE_BLOB, DATA_TYPE_BLOB };
uint64_t sizes[] = { sizeof(uint8_t), sizeof(uint8_t) };
param.columns = columns;
param.offsets = offsets;
param.types = types;
param.blob_sizes = sizes;
int res = insert_by_table(config, ¶m);
封装以后你们这么调
DatabaseConfig* config = build_default_database_config();
init_database(config);
connect_database(config);
SystemLog log = {
...
}
insert_system_log(DatabaseConfig* config, &log);
6 条评论
场景转换稍显突兀,可增加过渡描写。
反驳对手观点时需更注重逻辑严密性。
情感真挚自然,字里行间传递出强烈的感染力。
想想你的文章写的特别好www.jiwenlaw.com
怎么收藏这篇文章?
博主真是太厉害了!!!