/*使用Mysql(Version: 5.0.77)的一个简单的例子*/
#include
#include "/usr/include/mysql/mysql.h"
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "HustBak";
char *password = "hustpass"; /* 此处改成你的密码 */
char *database = "DBHustBak";
conn = mysql_init(NULL);
/* Connect to database */
if (mysql_real_connect(conn, server,user, password, database, 0, NULL, 0)){
printf("success connect\n");
}
/* send SQL query */
if (mysql_query(conn, "select * from User")) {
fprintf(stderr, "%s\n", mysql_error(conn));
return 1;
}
res=mysql_use_result(conn);
printf("MySQL Tables in mysql databases:\n");
while((row=mysql_fetch_row(res))!=NULL)
printf("%s\n",row[0]);
return 1;
}
在数据库中进行连接和查询等操作的一个模板函数例子,
文件保存为test1.c文件形式,编译时用的命令为
gcc -o test1 $(mysql_config --cflags) test1.c $(mysql_config --libs)
其中mysql_config是数据库环境设置,可以通过查看mysql_config --cflags和mysql_config --libs来查看配置
C语言访问Mysql基本函数
在C连接mysql服务器,需要使用libmysqlclient开发包。在ubuntu系统上可以通过
命令sudo apt-get install libsqlclient-dev 安装。
和其它和数据库访问类似,具体的过程有
1,连接数据库
2,访问数据
3,处理数据
4,断开连接
下面,接上面的顺序来了解mysql数据库编程所要用到的具体函数
一,连接数据库
1,初始化一个连接句柄
MYSQL *mysql_init(MYSQL *);
//参数如果为NULL,则分配一个新的连接句柄
2,int mysql_option(MYSQL *connection, enum option_to_set, const char *
argument);
//这个函数用来设置连接特性的,也可以不设,一切会默认。而且,每次只能设
置一个选项,想设置多个选项,则需要多次调用。以下是三个主要的选项,其它见手册。
枚举选项实际参数类型含义
MYSQL_OPT_CONNECT_TIMEOUT常数,无符号的整数类型中止连接前等待的秒数
MYSQL_OPT_COMPRESS无,使用NULL在网络连接中使用压缩
MYSQL_INIT_COMMAND常数,char*连接建立以后发送的命令
3,设置及连接数据库
MYSQL *mysql_real_connect(MYSQL *connection, //连接句柄const char *server_host, //数据库所在主机名
const char *sql_username; //访问数据库的数据名
const char *sql_password; //密码
const char *db_name; //数据库名
unsigned int port_number, //端口号,为0则使用默认(一般选择)
const char *unix_socket_name, //一般为NULL
unsigned int flags); //见说明
//它们的含意参数的名称已经很明白了,而最后一个参数flags只有两个参数
可供选择
CLIENT_ODBC---如果你确知ODBC正用于远程数据库,则需要用到它。
CLIENT_FOUND_ROW--
二,执行SQL语句mysql_query
int mysql_query(MYSQL *connection, const char *query);利用connection对query的SQL语句执行成功,则返回0.三,获取数据
1,检验受影响的行数量
my_ulonglong mysql_affected_rows(MYSQL *connection);
2,检索数据
一般,我们用mysql_query发出查询,利用mysql_store_result或
mysql_use_result执行检索。再可以用mysql_fetch_row来处理数据,最后用
mysql_free_result进行整理工作。
MYSQL_RES *mysql_store_result(MYSQL *connection);
//如果执行失败则返回NULL实际返回的行数:
my_ulonglong mysql_num_rows(MYSQL_RES *result);获得从store result中得到的结构体,并从中检索单个行,返回给你的行结构体
中的数据。当没有更多的数据,或者出错时,将返回NULL值。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);在結果集合中跳跃,设置由下面的fetch row选项返回的行。区距值是一个行的
号码,这个值大于零而小于結果集合中的行数量。传递零值将会在下一次调用到
mysql_fetch_row中时返回第一行。
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);得到一个区距值(off value),表明在结果集合中当前的位置。它不是行数,所
以不能用mysql_data_seek来使用它。
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);在結果集合中移动当前位置,并将当前的位置返回MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET
offset);当使用完一个结果集合后,要使MYSQL库整理分配的对象。
void mysql_free_result(MYSQL_RES *result);逐行检索数据
MYSQL_RES * mysql_use_result(MYSQL *connection);
//它嚅然也是返回一个结果集合对象,但在返回时它实际上并没有将任何检
索到的数据返回到结果集合中,而仅仅是将结果集合初始化来接收数据。
注::为了检索数据,你必須和以前一样反复调用mysql_fetch_row,直到检
索完所有的数据,如果你在一次use result调用中没有得到所有的数据,那么后面的数据检索就损坏了。
处理返回的数据
得到结果集合中字段的数目。
unsigned int mysql_field_count(MYSQL *connection);得到关于字段和字段内数据的具体信息
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
MYSQL_FIELD结构体的字段含意
char *name列的名称,字符串表示char *table列所在的表名称
char *def如果调用mysql_list_field,则包含列的默认值
enum enum_field_types type列的类型
unsigned int length列的宽度,在定义表格时指定
unsigned int max_length如果你使用mysql_store_result,则它包含找到的最
长的实际列长度,使用mysql_use_result,则不会对它进行设置
unsigned int flag告诉你关于列的信息,通常标识有:NOT_NULL_FLAG,
PRI_KEY_FLAG,UNSIGNED_FLAG,AUTO_INCREMENT_FLAG,BINARY_FLAG.
unsigned int decimals十进制数,只对数据字段有效。
列的几个常用类型:
FIELD_TYPE_DECIMAL
FIELD_TYPE_LONG
FIELD_TYPE_STRING
FIEDL_TYPE_VAR_STRING宏IS_NUM,如果字段类型是数字形式的,则返回真
三,断开连接及其它
void mysql_close(MYSQL *connection);处理错误
unsigned int mysql_errno(MYSQL *connection);
char *mysql_error(MYSQL *connection);
Mysql_get_client_info char *mysql_get_client_info(void);返回客户正在使用的库版本信息
Mysql_get_host_info char *mysql_get_host_info(MYSQL *connection);返回服务器连接信息
Mysql_get_server_info char *mysql_get_server_info(MYSQL *connection);返回当前连接的服务器信息
Mysql_info char* mysql_info(MYSQL *connection)返回最近查询的信息,但只对几个查询类型有效,通常是INSERT和UPDATE语
句,否则返回NULL
Mysql_select_db int mysql_select_db(MYSQL *connection, const char
*dbname);假如用户有合适的权限,可以从默认的数据库转到由参数設定的数据库。成
功则返回0 Mysql_shutdown int mysql_shutdown (MYSQL *connection);如果有合适的权限,可以用此来关闭所有连接的数据库服务器。成功则返回 零。