Linux下C对MYSQL数据库的操作
进行Linux C的MYSQL需要用到下面的数据类型:MYSQL MYSQL_RES(结果集合) MYSQL_ROW(记录) MYSQL_FIELD(字段)
Linux下用c进行MYSQL数据库的访问分为以下几个步骤:
1. 连接数据库
l MYSQL* mysql_init(MYSQL* mysql_ptr)
在进行连接数据库前要初始化一个MYSQL结构,然后调用mysql_init()初始化结构(含分配内存空间),若传递结构为NULL则代表初始化一个新结构。
l int mysql_options(MYSQL* mysql_ptr,enum mysql_option option,const char *arg)
接下来可以使用mysql_options()进行设置数据库额外的连接选项。
l MYSQL* mysql_real_connect(MYSQL* mysql_ptr,const char* host,const char* user,const char* password,const char* db,unsigned int port,const char* unix_socket,unsigned int client_flag)
最后用mysql_real_connect()进行数据库的连接。
2. 处理数据
l int mysql_query(MYSQL* mysql_ptr,const char* sqlstring)
调用mysql_query()执行sql语句。
l 不返回数据型(执行insert、update、delete)
my_ulonglong mysql_affected_rows(MYSQL* mysql_ptr)
该函数用来返回受影响的行数。在用printf时推荐用%lu。
l 返回数据型(执行select)
对于返回数据型的通常分为几个步骤,在用mysql_query()发出查询之后需要检索存储数据
? MYSQL_RES*mysql_store_result(MYSQL* mysql_ptr)
此函数从数据库服务器中检索所有满足条件的数据并将它存放在客户端(消耗资源),并用结果集合结构类型指针指向。如果没有数据或调用失败则返回null值。
my_ulonglong mysql_num_rows(MYSQL_RES* res_ptr)
当有数据时可以调用mysql_num_rows()返回结果集合中数据的行数。
void mysql_data_seek(MYSQL_RES* res_ptr,unsigned long linenum)
该函数可以在结果集合中定位任意行,linenum为从0到记录个数减1的行号,0为第一行记录。
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES* res_ptr)
该函数返回一个偏移量,表示结果集合中的当前位置。
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES res_ptr,MYSQL_ROW_OFFSET offset)
这个函数用于在结果集合中移动当前位置,移动参数为偏移量。与mysql_row_tell()在记录集中已知点的跳转很有用。
? MYSQL_RES* mysql_use_result(MYSQL* mysql_ptr)
此函数返回时并没有将任何数据放到结果集中,而仅仅是将结果集合初始化来接收数据。检索数据需要反复调用mysql_fetch_row(),直到检索完所有数据。使用此函数,将不能使用mysql_num_row、mysql_data_seek、mysql_row_tell、mysql_row_seek。
l 处理数据
MYSQL_ROW mysql_fetch_row(MYSQL* res_ptr)
该函数用于从结果集中返回一条记录。
unsigned int mysql_field_count(MYSQL* mysql_ptr),注意参数类型。
该函数返回结果集合中字段的数量,还可以判断mysql_store_result()为何失败(如果result返回null,但是该函数返回值大于0,则表明在进行检索数据过程中出现了错误;若该函数返回0,则表明没有检索到列)
MYSQL_FIELD* mysql_fetch_field(MYSQL_RES* res_ptr)
该函数返回结果集合中字段的定义。(如:name为字段的名称,具体查看mysql.h中的定义)IS_NUM()宏可以用来判断字段类型是否为数字型。
MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES*res_ptr,MYSQL_FIELD_OFFSET offset)
该函数将字段当前位置设置到给定的偏移量,0为第一个字段。
每一条记录row为字段数据数组(字符串数组),显示字段值时用row[n],n从0到field_count。
l void mysql_free_result(MYSQL_RES* res_ptr)
在使用完结果集后调用mysql_free_result()是MYSQL数据库进行必要的整理工作。
3. 关闭数据库
void mysql_close(MYSQL* mysql)
数据库在使用完后应当进行关闭,调用mysql_close()进行关闭,mysql被清除。
错误处理
unsigned int mysql_errno(MYSQL* mysql_ptr)
const char* mysql_error(MYSQL* mysql_ptr)
对于mysql_ptr指定的连接,mysql_errno()返回最近调用的函数返回的错误代码,mysql_error则返回错误的文字信息。
- 10-26Whitewidow SQL漏洞扫描工具演示
- 10-26SQL黑客注入防御与绕过的多种姿势
- 12-23SQLServer数据库操作总结(sql语法的使用)
- 12-21C#连接Sqlite
- 12-21ORACLE数据库学习之SQL性能优化详解
- 12-21解决SQLSERVER2008数据库日志文件占用硬盘空间问题
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 11-18LG新能源宣布与Bear Robotics达成合作,成为
- 11-18机构:三季度全球个人智能音频设备市场强势
- 11-18闲鱼:注册用户过6亿 AI技术已应用于闲置交
- 11-18美柚、宝宝树回应“涉黄短信骚扰”:未发现
- 11-01京东七鲜与前置仓完成融合