MYSQL 的 C 语言 驱动程序:
今天 太累了 ,.. 思路不清晰 .;
先放在这里; 明天再来 看一下; 明天 还有很多 事情要做... 计划开始施行!!!!!!
主要是 想要 写一个 读取 任意 一行 MYSQL_RES 数据库结果集 中的 数据;
1 //以下 函数 尚未 编译 测试, 雏形
2 MYSQL_ROW GetRow(unsigned int rowIndex)
3 {
4
5 while(rowIndex && Result->data_cursor->data)
2 MYSQL_ROW GetRow(unsigned int rowIndex)
3 {
4
5 while(rowIndex && Result->data_cursor->data)
6 {
7 Result->data_cursor = Result->data_cursor->next;
8 }
9
10 return Result->data_cursor->data;
11
7 Result->data_cursor = Result->data_cursor->next;
8 }
9
10 return Result->data_cursor->data;
11
12 }
1 typedef struct st_mysql_res {
2 my_ulonglong row_count;
3 MYSQL_FIELD *fields;
4 MYSQL_DATA *data;
5 MYSQL_ROWS *data_cursor;
6 unsigned long *lengths; /* column lengths of current row */
7 MYSQL *handle; /* for unbuffered reads */
8 const struct st_mysql_methods *methods;
9 MYSQL_ROW row; /* If unbuffered read */
10 MYSQL_ROW current_row; /* buffer to current row */
11 MEM_ROOT field_alloc;
12 unsigned int field_count, current_field;
13 my_bool eof; /* Used by mysql_fetch_row */
14 /* mysql_stmt_close() had to cancel this result */
15 my_bool unbuffered_fetch_cancelled;
16 void *extension;
17 } MYSQL_RES;
3 MYSQL_FIELD *fields;
4 MYSQL_DATA *data;
5 MYSQL_ROWS *data_cursor;
6 unsigned long *lengths; /* column lengths of current row */
7 MYSQL *handle; /* for unbuffered reads */
8 const struct st_mysql_methods *methods;
9 MYSQL_ROW row; /* If unbuffered read */
10 MYSQL_ROW current_row; /* buffer to current row */
11 MEM_ROOT field_alloc;
12 unsigned int field_count, current_field;
13 my_bool eof; /* Used by mysql_fetch_row */
14 /* mysql_stmt_close() had to cancel this result */
15 my_bool unbuffered_fetch_cancelled;
16 void *extension;
17 } MYSQL_RES;
发现一个函数 MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row),
MYSQL_ROW_OFFSET 就是 MYSQL_RES 里面的 ( MYSQL_ROWS *)
细看一下 -->
1
2 mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row)
3 {
4 MYSQL_ROW_OFFSET return_value=result->data_cursor;
5 result->current_row= 0;
6 result->data_cursor= row;
7 return return_value;
8 }
3 {
4 MYSQL_ROW_OFFSET return_value=result->data_cursor;
5 result->current_row= 0;
6 result->data_cursor= row;
7 return return_value;
8 }
没错 就是这样.! 但是怎么用呢 ? 这个函数为何返回 原来的 result->data_cursor; ?
??
2. 无意中发现
1
2 void STDCALL
3 mysql_data_seek(MYSQL_RES *result, my_ulonglong row)
4 {
5 MYSQL_ROWS *tmp=0;
6 DBUG_PRINT("info",("mysql_data_seek(%ld)",(long) row));
7 if (result->data)
8 for (tmp=result->data->data; row-- && tmp ; tmp = tmp->next) ;
9 result->current_row=0;
10 result->data_cursor = tmp;
11 }
3 mysql_data_seek(MYSQL_RES *result, my_ulonglong row)
4 {
5 MYSQL_ROWS *tmp=0;
6 DBUG_PRINT("info",("mysql_data_seek(%ld)",(long) row));
7 if (result->data)
8 for (tmp=result->data->data; row-- && tmp ; tmp = tmp->next) ;
9 result->current_row=0;
10 result->data_cursor = tmp;
11 }
这就 好办了 ..跟我 之前 自己 设计的方法 思路 基本相似;
但是 发现 偶 想问题 还是 不是很周全....
先到这 ... 明天再说 ...
洗洗睡吧...