resp协议定义, xml定义配置文件
This commit is contained in:
315
NtyCo/sample/nty_mysql_oper.c
Normal file
315
NtyCo/sample/nty_mysql_oper.c
Normal file
@@ -0,0 +1,315 @@
|
||||
|
||||
|
||||
|
||||
|
||||
#include "nty_coroutine.h"
|
||||
|
||||
|
||||
#include <mysql.h>
|
||||
|
||||
|
||||
#define KING_DB_SERVER_IP "192.168.233.133"
|
||||
#define KING_DB_SERVER_PORT 3306
|
||||
|
||||
#define KING_DB_USERNAME "king"
|
||||
#define KING_DB_PASSWORD "123456"
|
||||
|
||||
#define KING_DB_DEFAULTDB "KING_DB"
|
||||
|
||||
|
||||
#define SQL_INSERT_TBL_USER "INSERT TBL_USER(U_NAME, U_GENDER) VALUES('King', 'man');"
|
||||
#define SQL_SELECT_TBL_USER "SELECT * FROM TBL_USER;"
|
||||
|
||||
#define SQL_DELETE_TBL_USER "CALL PROC_DELETE_USER('King')"
|
||||
#define SQL_INSERT_IMG_USER "INSERT TBL_USER(U_NAME, U_GENDER, U_IMG) VALUES('King', 'man', ?);"
|
||||
|
||||
#define SQL_SELECT_IMG_USER "SELECT U_IMG FROM TBL_USER WHERE U_NAME='King';"
|
||||
|
||||
|
||||
#define FILE_IMAGE_LENGTH (64*1024)
|
||||
// C U R D -->
|
||||
//
|
||||
|
||||
int king_mysql_select(MYSQL *handle) { //
|
||||
|
||||
// mysql_real_query --> sql
|
||||
if (mysql_real_query(handle, SQL_SELECT_TBL_USER, strlen(SQL_SELECT_TBL_USER))) {
|
||||
printf("mysql_real_query : %s\n", mysql_error(handle));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
// store -->
|
||||
MYSQL_RES *res = mysql_store_result(handle);
|
||||
if (res == NULL) {
|
||||
printf("mysql_store_result : %s\n", mysql_error(handle));
|
||||
return -2;
|
||||
}
|
||||
|
||||
// rows / fields
|
||||
int rows = mysql_num_rows(res);
|
||||
printf("rows: %d\n", rows);
|
||||
|
||||
int fields = mysql_num_fields(res);
|
||||
printf("fields: %d\n", fields);
|
||||
|
||||
// fetch
|
||||
MYSQL_ROW row;
|
||||
while ((row = mysql_fetch_row(res))) {
|
||||
|
||||
int i = 0;
|
||||
for (i = 0;i < fields;i ++) {
|
||||
printf("%s\t", row[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
}
|
||||
|
||||
mysql_free_result(res);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// filename : path + file name
|
||||
// buffer : store image data
|
||||
|
||||
int read_image(char *filename, char *buffer) {
|
||||
|
||||
if (filename == NULL || buffer == NULL) return -1;
|
||||
|
||||
FILE *fp = fopen(filename, "rb"); //
|
||||
if (fp == NULL) {
|
||||
printf("fopen failed\n");
|
||||
return -2;
|
||||
}
|
||||
|
||||
// file size
|
||||
fseek(fp, 0, SEEK_END);
|
||||
int length = ftell(fp); // file size
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
int size = fread(buffer, 1, length, fp);
|
||||
if (size != length) {
|
||||
printf("fread failed: %d\n", size);
|
||||
return -3;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
|
||||
return size;
|
||||
|
||||
}
|
||||
|
||||
// filename :
|
||||
// buffer :
|
||||
// length :
|
||||
|
||||
int write_image(char *filename, char *buffer, int length) {
|
||||
|
||||
if (filename == NULL || buffer == NULL || length <= 0) return -1;
|
||||
|
||||
FILE *fp = fopen(filename, "wb+"); //
|
||||
if (fp == NULL) {
|
||||
printf("fopen failed\n");
|
||||
return -2;
|
||||
}
|
||||
|
||||
int size = fwrite(buffer, 1, length, fp);
|
||||
if (size != length) {
|
||||
printf("fwrite failed: %d\n", size);
|
||||
return -3;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
int mysql_write(MYSQL *handle, char *buffer, int length) {
|
||||
|
||||
if (handle == NULL || buffer == NULL || length <= 0) return -1;
|
||||
|
||||
MYSQL_STMT *stmt = mysql_stmt_init(handle);
|
||||
int ret = mysql_stmt_prepare(stmt, SQL_INSERT_IMG_USER, strlen(SQL_INSERT_IMG_USER));
|
||||
if (ret) {
|
||||
printf("mysql_stmt_prepare : %s\n", mysql_error(handle));
|
||||
return -2;
|
||||
}
|
||||
|
||||
MYSQL_BIND param = {0};
|
||||
param.buffer_type = MYSQL_TYPE_LONG_BLOB;
|
||||
param.buffer = NULL;
|
||||
param.is_null = 0;
|
||||
param.length = NULL;
|
||||
|
||||
ret = mysql_stmt_bind_param(stmt, ¶m);
|
||||
if (ret) {
|
||||
printf("mysql_stmt_bind_param : %s\n", mysql_error(handle));
|
||||
return -3;
|
||||
}
|
||||
|
||||
ret = mysql_stmt_send_long_data(stmt, 0, buffer, length);
|
||||
if (ret) {
|
||||
printf("mysql_stmt_send_long_data : %s\n", mysql_error(handle));
|
||||
return -4;
|
||||
}
|
||||
|
||||
ret = mysql_stmt_execute(stmt);
|
||||
if (ret) {
|
||||
printf("mysql_stmt_execute : %s\n", mysql_error(handle));
|
||||
return -5;
|
||||
}
|
||||
|
||||
ret = mysql_stmt_close(stmt);
|
||||
if (ret) {
|
||||
printf("mysql_stmt_close : %s\n", mysql_error(handle));
|
||||
return -6;
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int mysql_read(MYSQL *handle, char *buffer, int length) {
|
||||
|
||||
if (handle == NULL || buffer == NULL || length <= 0) return -1;
|
||||
|
||||
MYSQL_STMT *stmt = mysql_stmt_init(handle);
|
||||
int ret = mysql_stmt_prepare(stmt, SQL_SELECT_IMG_USER, strlen(SQL_SELECT_IMG_USER));
|
||||
if (ret) {
|
||||
printf("mysql_stmt_prepare : %s\n", mysql_error(handle));
|
||||
return -2;
|
||||
}
|
||||
|
||||
|
||||
MYSQL_BIND result = {0};
|
||||
|
||||
result.buffer_type = MYSQL_TYPE_LONG_BLOB;
|
||||
unsigned long total_length = 0;
|
||||
result.length = &total_length;
|
||||
|
||||
ret = mysql_stmt_bind_result(stmt, &result);
|
||||
if (ret) {
|
||||
printf("mysql_stmt_bind_result : %s\n", mysql_error(handle));
|
||||
return -3;
|
||||
}
|
||||
|
||||
ret = mysql_stmt_execute(stmt);
|
||||
if (ret) {
|
||||
printf("mysql_stmt_execute : %s\n", mysql_error(handle));
|
||||
return -4;
|
||||
}
|
||||
|
||||
ret = mysql_stmt_store_result(stmt);
|
||||
if (ret) {
|
||||
printf("mysql_stmt_store_result : %s\n", mysql_error(handle));
|
||||
return -5;
|
||||
}
|
||||
|
||||
|
||||
while (1) {
|
||||
|
||||
ret = mysql_stmt_fetch(stmt);
|
||||
if (ret != 0 && ret != MYSQL_DATA_TRUNCATED) break; //
|
||||
|
||||
int start = 0;
|
||||
while (start < (int)total_length) {
|
||||
result.buffer = buffer + start;
|
||||
result.buffer_length = 1;
|
||||
mysql_stmt_fetch_column(stmt, &result, 0, start);
|
||||
start += result.buffer_length;
|
||||
}
|
||||
}
|
||||
|
||||
mysql_stmt_close(stmt);
|
||||
|
||||
return total_length;
|
||||
|
||||
}
|
||||
|
||||
void coroutine_func(void *arg) {
|
||||
|
||||
MYSQL mysql;
|
||||
|
||||
printf("coroutine_func\n");
|
||||
if (NULL == mysql_init(&mysql)) {
|
||||
printf("mysql_init : %s\n", mysql_error(&mysql));
|
||||
return ;
|
||||
}
|
||||
|
||||
if (!mysql_real_connect(&mysql, KING_DB_SERVER_IP, KING_DB_USERNAME, KING_DB_PASSWORD,
|
||||
KING_DB_DEFAULTDB, KING_DB_SERVER_PORT, NULL, 0)) {
|
||||
|
||||
printf("mysql_real_connect : %s\n", mysql_error(&mysql));
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// mysql --> insert
|
||||
printf("case 1 : mysql --> insert \n");
|
||||
#if 1
|
||||
if (mysql_real_query(&mysql, SQL_INSERT_TBL_USER, strlen(SQL_INSERT_TBL_USER))) {
|
||||
printf("mysql_real_query : %s\n", mysql_error(&mysql));
|
||||
goto Exit;
|
||||
}
|
||||
#endif
|
||||
|
||||
king_mysql_select(&mysql);
|
||||
|
||||
// mysql --> delete
|
||||
|
||||
printf("case 2 : mysql --> delete \n");
|
||||
#if 1
|
||||
if (mysql_real_query(&mysql, SQL_DELETE_TBL_USER, strlen(SQL_DELETE_TBL_USER))) {
|
||||
printf("mysql_real_query : %s\n", mysql_error(&mysql));
|
||||
goto Exit;
|
||||
}
|
||||
#endif
|
||||
|
||||
king_mysql_select(&mysql);
|
||||
|
||||
|
||||
|
||||
printf("case 3 : mysql --> read image and write mysql\n");
|
||||
|
||||
char buffer[FILE_IMAGE_LENGTH] = {0};
|
||||
int length = read_image("0voice.jpg", buffer);
|
||||
if (length < 0) goto Exit;
|
||||
|
||||
mysql_write(&mysql, buffer, length); ///
|
||||
|
||||
|
||||
printf("case 4 : mysql --> read mysql and write image\n");
|
||||
|
||||
memset(buffer, 0, FILE_IMAGE_LENGTH);
|
||||
length = mysql_read(&mysql, buffer, FILE_IMAGE_LENGTH);
|
||||
|
||||
write_image("a.jpg", buffer, length);
|
||||
|
||||
Exit:
|
||||
mysql_close(&mysql);
|
||||
|
||||
return ;
|
||||
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
#if 1
|
||||
//init_hook();
|
||||
|
||||
nty_coroutine *co = NULL;
|
||||
nty_coroutine_create(&co, coroutine_func, NULL);
|
||||
nty_schedule_run(); //run
|
||||
#else
|
||||
|
||||
coroutine_func(NULL);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user