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 }
这就 好办了 ..跟我 之前 自己 设计的方法 思路 基本相似;
但是 发现 偶 想问题 还是 不是很周全....
先到这 ... 明天再说 ...
洗洗睡吧...