MySQL数据库的C/C++编程API
单一文件包含了select/update等操作,使用时需要手动分离
//执行查询或表操作(update...)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h>
int main()
{
//mysql初始化
MYSQL *mysql = mysql_init(NULL);
if(mysql==NULL)
{
//初始化失败处理
}
//连接数据库
//MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
MYSQL *conn = mysql_real_connect(mysql, "localhost", "root", "123456", "scott", 0, NULL, 0);
if(conn==NULL)
{
//连接数据库失败处理
}
//获取当前使用的字符集
printf("before:[%s]\n", mysql_character_set_name(conn));
//设置字符集
mysql_set_character_set(conn, "utf8");
printf("after:[%s]\n", mysql_character_set_name(conn));
//执行sql语句
char sql[] = "select * from dept";
int ret = mysql_query(conn, sql);
if (ret!=0)
{
// 执行sql语句error
}
else // query succeeded, process any data returned by it
{
result = mysql_store_result(&mysql);
if (result!=NULL) // 有需要返回的结果集
{
//获取结果集中每一行的列数
//int num = mysql_field_count(conn);
int num = mysql_num_fields(results);
//获取表头的列名
MYSQL_FIELD *fields = mysql_fetch_fields(results);
if(fields==NULL)
{
//获取表头的列名失败处理...
}
//循环打印表头
for(i=0; i<num; i++)
{
printf("%s ", fields[i].name);
}
printf("\n");
//获取结果集中的每一行记录
MYSQL_ROW row;
while(row=mysql_fetch_row(results))
{
for(i=0; i<num; i++)
{
printf("%s ", row[i]);
}
printf("\n");
}
//释放结果集
mysql_free_result(results);
}
else //没有需要返回的结果集或mysql_store_result出错
{
if(mysql_field_count(&mysql) == 0)
{
// query does not return data
// (it was not a SELECT)
//没有需要返回的结果集,但可以获得影响的行数
num_rows = mysql_affected_rows(&mysql);
}
else // mysql_store_result() 出错
{
fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
}
}
}
//关闭数据库连接
mysql_close(conn);
return 0;
}