void sqlite_message_insert(sqlite_db_t db, char* msgid, int msgstatus, int msgtype, char* msgsender, char* receiver, char* msgstr, int len){ db = sqlite_db_open("/Cajian/imServer/db/imserver.db"); time_t t = time(NULL); char buf[20] = ""; snprintf(buf, 20, "%d", (int)t); char *sql = "INSERT INTO message (msgid, msgstatus, msgtype, msgsender, msgreceiver, msgtime, msgcontent) VALUES ( ?,?,?,?,?,?,?)"; int res = sqlite3_prepare(db->db, sql, -1, &(db->stmt), 0); if (res != SQLITE_OK || db->stmt == NULL) { fprintf(stderr, "sqlite3_prepare is error\n"); sqlite_db_close(db); return; } sqlite3_bind_text(db->stmt, 1, msgid, -1, SQLITE_STATIC); sqlite3_bind_int(db->stmt, 2, msgstatus); sqlite3_bind_int(db->stmt, 3, msgtype); sqlite3_bind_text(db->stmt, 4, msgsender, -1, SQLITE_STATIC); sqlite3_bind_text(db->stmt, 5, receiver, -1, SQLITE_STATIC); sqlite3_bind_text(db->stmt, 6, buf, -1, SQLITE_STATIC); sqlite3_bind_text(db->stmt, 7, msgstr, len, SQLITE_STATIC); res = sqlite3_step(db->stmt); if (res != SQLITE_DONE) { fprintf(stderr, "sqlite3_stemp is error \n"); } sqlite3_finalize(db->stmt); db->stmt = NULL; sqlite_db_close(db); }
/* 工作者线程 */ static void * event_worker(void * arg) { event_queue_t * peq = arg; struct cmd_event * pe; struct cmd_event * events[EVENTS_SIZ]; int cnt; peq->sql_db = malloc(sizeof(*(peq->sql_db))); //在当前线程中打开数据库连接 if (peq->sql_db == NULL) { log_error(LOG_ERROR, "NO MEM"); exit(1); } if (sqlite_db_open(peq->sql_db, SQL_DB) < 0) { //在当前线程中打开数据库连接 log_error(LOG_ERROR, "event_queue_init"); //!!!出错 } //sleep(1); do { // printf("\nevent_worker\n"); cnt = 0; while ((pe = event_queue_pop(peq)) != NULL) { pe->cb(peq->sql_db, pe->psock, pe->buffer, pe->buf_siz); events[cnt++] = pe; cnt -= del_events(cnt, events, peq); } del_all_events(cnt, events, peq); event_queue_wait(peq); //sleep(1); } while (1); sqlite_db_close(peq->sql_db); free(peq->sql_db); event_queue_destroy(peq); return NULL; }
void sqlite_message_update_status(sqlite_db_t db, char* msgid, int msgstatus){ db = sqlite_db_open("../db/imserver.db"); sqlite3_stmt *stmt; char *sql = "UPDATE message SET msgstatus = ? WHERE msgid = ? "; int res = sqlite3_prepare(db->db, sql, -1, &stmt, 0); if (res != SQLITE_OK || stmt == NULL) { fprintf(stderr, "sqlite3_prepare is error, %s \n", sqlite3_errmsg(db->db)); sqlite_db_close(db); return; } sqlite3_bind_int(stmt, 1, msgstatus); sqlite3_bind_text(stmt, 2, msgid, -1, SQLITE_STATIC); res = sqlite3_step(stmt); if (res != SQLITE_DONE) { fprintf(stderr, "sqlite3_step is error, %s \n", sqlite3_errmsg(db->db)); } sqlite3_finalize(db->stmt); db->stmt = NULL; sqlite_db_close(db);
int cache_init(void) { //sqlite_db_t * db; if (pcache != NULL) return 0; pcache = malloc(sizeof(*pcache)); if (pcache == NULL) { log_error(LOG_EMERG, "malloc"); return -1; } memset(pcache, 0, sizeof(*pcache)); pcache->db = malloc(sizeof(sqlite_db_t)); if (pcache->db == NULL) { log_error(LOG_ERROR, "pcache"); exit(1); } pthread_mutex_init(&pcache->lock, NULL); if (sqlite_db_open(pcache->db, SQL_DB) < 0) { free(pcache); log_error(LOG_NOTICE, "sqlite db open"); return -1; } return 0; }