要想知道怎么通过c语言操作数据库,必须要了解这几个结构体的含义,这里只是简单说一下如果想要了解的更深入可以到网上搜一下
C API数据类型
1、MYSQL结构代表一个数据库连接的句柄,包含有关服务器的连接状态的信息,几乎所有的函数均使用到他。要连接MySQL,必须建立MYSQL实例,通过mysql_init初始化方能开始连接。
2、MYSQL_RES结果代表返回的查询结果(select,show等)。也将查询的返回的信息成为“结果集”。在c的API里对应的就是MYSQL_RES了,从数据库读取数据,最后从MYSQL_RES中读取数据。
3、MYSQL_ROW这是一个行数据的类型安全(type-safe)的表示。当前它实现为一个计数字节的字符串数组。(如果字段值可能包含二进制数据,你不能将这些视为空终止串,因为这样的值可以在内部包含空字节) 行通过调用mysql_fetch_row()获得。
这里归纳了C API可使用的函数,详见MYSQL手册
函数
|
描述
|
mysql_affected_rows()
|
返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。
|
mysql_autocommit()
|
切换 autocommit模式,ON/OFF
|
mysql_change_user()
|
更改打开连接上的用户和数据库。
|
mysql_charset_name()
|
返回用于连接的默认字符集的名称。
|
mysql_close()
|
关闭服务器连接。
|
mysql_commit()
|
提交事务。
|
mysql_connect()
|
连接到MySQL服务器。该函数已不再被重视,使用mysql_real_connect()取代。
|
mysql_create_db()
|
创建数据库。该函数已不再被重视,使用SQL语句CREATE DATABASE取而代之。
|
mysql_data_seek()
|
在查询结果集中查找属性行编号。
|
mysql_debug()
|
用给定的字符串执行DBUG_PUSH。
|
mysql_drop_db()
|
撤销数据库。该函数已不再被重视,使用SQL语句DROP DATABASE取而代之。
|
mysql_dump_debug_info()
|
让服务器将调试信息写入日志。
|
mysql_eof()
|
确定是否读取了结果集的最后一行。该函数已不再被重视,可以使用mysql_errno()或mysql_error()取而代之。
|
mysql_errno()
|
返回上次调用的MySQL函数的错误编号。
|
mysql_error()
|
返回上次调用的MySQL函数的错误消息。
|
mysql_escape_string()
|
为了用在SQL语句中,对特殊字符进行转义处理。
|
mysql_fetch_field()
|
返回下一个表字段的类型。
|
mysql_fetch_field_direct()
|
给定字段编号,返回表字段的类型。
|
mysql_fetch_fields()
|
返回所有字段结构的数组。
|
mysql_fetch_lengths()
|
返回当前行中所有列的长度。
|
mysql_fetch_row()
|
从结果集中获取下一行
|
mysql_field_seek()
|
将列光标置于指定的列。
|
mysql_field_count()
|
返回上次执行语句的结果列的数目。
|
mysql_field_tell()
|
返回上次mysql_fetch_field()所使用字段光标的位置。
|
mysql_free_result()
|
释放结果集使用的内存。
|
mysql_get_client_info()
|
以字符串形式返回客户端版本信息。
|
mysql_get_client_version()
|
以整数形式返回客户端版本信息。
|
mysql_get_host_info()
|
返回描述连接的字符串。
|
mysql_get_server_version()
|
以整数形式返回服务器的版本号。
|
mysql_get_proto_info()
|
返回连接所使用的协议版本。
|
mysql_get_server_info()
|
返回服务器的版本号。
|
mysql_info()
|
返回关于最近所执行查询的信息。
|
mysql_init()
|
获取或初始化MYSQL结构。
|
mysql_insert_id()
|
返回上一个查询为AUTO_INCREMENT列生成的ID。
|
mysql_kill()
|
杀死给定的线程。
|
mysql_library_end()
|
最终确定MySQL C API库。
|
mysql_library_init()
|
初始化MySQL C API库。
|
mysql_list_dbs()
|
返回与简单正则表达式匹配的数据库名称。
|
mysql_list_fields()
|
返回与简单正则表达式匹配的字段名称。
|
mysql_list_processes()
|
返回当前服务器线程的列表。
|
mysql_list_tables()
|
返回与简单正则表达式匹配的表名。
|
mysql_more_results()
|
检查是否还存在其他结果。
|
mysql_next_result()
|
在多语句执行过程中返回/初始化下一个结果。
|
mysql_num_fields()
|
返回结果集中的列数。
|
mysql_num_rows()
|
返回结果集中的行数。
|
mysql_options()
|
为mysql_connect()设置连接选项。
|
mysql_ping()
|
检查与服务器的连接是否工作,如有必要重新连接。
|
mysql_query()
|
执行指定为“以Null终结的字符串”的SQL查询。
|
mysql_real_connect()
|
连接到MySQL服务器。
|
mysql_real_escape_string()
|
考虑到连接的当前字符集,为了在SQL语句中使用,对字符串中的特殊字符进行转义处理。
|
mysql_real_query()
|
执行指定为计数字符串的SQL查询。
|
mysql_refresh()
|
刷新或复位表和高速缓冲。
|
mysql_reload()
|
通知服务器再次加载授权表。
|
mysql_rollback()
|
回滚事务。
|
mysql_row_seek()
|
使用从mysql_row_tell()返回的值,查找结果集中的行偏移。
|
mysql_row_tell()
|
返回行光标位置。
|
mysql_select_db()
|
选择数据库。
|
mysql_server_end()
|
最终确定嵌入式服务器库。
|
mysql_server_init()
|
初始化嵌入式服务器库。
|
mysql_set_server_option()
|
为连接设置选项(如多语句)。
|
mysql_sqlstate()
|
返回关于上一个错误的SQLSTATE错误代码。
|
mysql_shutdown()
|
关闭数据库服务器。
|
mysql_stat()
|
以字符串形式返回服务器状态。
|
mysql_store_result()
|
检索完整的结果集至客户端。
|
mysql_thread_id()
|
返回当前线程ID。
|
mysql_thread_safe()
|
如果客户端已编译为线程安全的,返回1。
|
mysql_use_result()
|
初始化逐行的结果集检索。
|
mysql_warning_count()
|
返回上一个SQL语句的告警数。
|
下面看一下到底怎么通过C API操作数据库
下面的例子为读取数据库的表中的数据
#include <stdio.h>
#include <mysql.h>
#include <string.h>
int main()
{
MYSQL mysql; //mysql连接
MYSQL_RES *res; //这个结构代表返回行的一个查询结果集
MYSQL_ROW row; //一个行数据的类型安全(type-safe)的表示
char *query; //查询语句
int t,r;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,"localhost", "root", NULL, "test",0,NULL,0))
{
printf( "Error connecting to database: %s",mysql_error(&mysql));
}
else
{
printf("Connected...\n");
}
query=" select * from qq";
t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));//执行指定为计数字符串的SQL查询。
if(t)
{
printf("执行显示时出现异常: %s",mysql_error(&mysql));
}
res=mysql_store_result(&mysql);//检索完整的结果集至客户端。
printf("姓名\t学号\t年龄\t\n");
while(row=mysql_fetch_row(res))
{
for(t=0;t<mysql_num_fields(res);t++)
{
printf("%s\t" ,row[t]);
}
printf("\n");
}
mysql_free_result(res);//释放结果集使用的内存。
mysql_close(&mysql);
return 0;
}
运行的命令和代码如下:
其实它是很简单的东西。