//模拟mysql客户端程序的代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include"mysql.h"
int main()
{
//mysql初始化
//MYSQL *mysql_init(MYSQL* mysql)
MYSQL *mysql = mysql_init(NULL);
if(mysql == NULL)
{
printf("mysql init error\n");
}
printf("mysql init success\n");
//连接mysql数据库
//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", "dexin", "mysql1", 0, NULL, 0); //端口写0时表示取默认值
if(conn == NULL)
{
printf("mysql connect eror, [%s]\n", mysql_error(mysql));
}
printf("mysql connect succ\n");
//获取当前使用的字符集,可发现此处用的是拉丁文(解决中文乱码问题)
printf("before---%s---\n", mysql_character_set_name(conn));
//设置默认使用的字符集
mysql_set_character_set(conn, "utf8");
//获取修改之后的字符集
printf("after---%s---\n", mysql_character_set_name(conn));
int ret;
int i;
char buf[1024];
//循环等待用户输入
while(1)
{
//打印提示符
write(STDOUT_FILENO, "mysql> ", strlen("mysql> "));
//接收用户输入
memset(buf, 0x00, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf));
//去掉回车键
buf[strlen(buf)-1] = '\0';
//若buf中包含分号,则去掉分号
char *p = strrchr(buf, ':');
if(p != NULL)
{
*p = '\0';
}
int len = strlen(buf);
//过滤掉buf前面的空格
for(i=0; i<len; i++)
{
if(buf[i]==' ')
continue;
else break;
}
memmove(buf, buf+i, len);
printf("buf==[%s]\n", buf);
//判断用户输入是否为exit或quit
if(strncasecmp(buf, "exit", 4)==0 || strncasecmp(buf, "quit", 4)==0)
{
mysql_close(conn);
exit(0);
}
//执行sql语句
ret = mysql_query(conn, buf);
if(ret != 0)
{
printf("%s\n",mysql_error(conn));
continue;
}
//若用户输入的不是select语句,则打印影响行数
if(strncasecmp(buf, "select", 6)!=0)
{
printf("Query OK, %d row affected\n", mysql_affected_rows(conn));
continue;
}
//下面是select查询的情况
//获取结果集
MYSQL_RES *results = mysql_store_result(conn);
if(results == NULL)
{
printf("mysql_store_result error, [%s]\n", mysql_error(mysql));
}
//获取列数
//int num = mysql_num_fields(results); 两种皆可
int num = mysql_field_count(conn);
//获取表头(列名)信息
MYSQL_FIELD *field = mysql_fetch_fields(results);
if(field == NULL)
{
printf("mysql_fetch_fields error, [%s]\n", mysql_error(conn));
mysql_free_result(results);
continue;
}
//打印表头信息
for(i=0; i<num; i++)
{
printf("%s ", field[i].name);
}
printf("\n");
//循环获取每一条记录
MYSQL_ROW row;
while(row = mysql_fetch_row(results))
{
//printf("%s %s %s\n", row[0], row[1], row[2]);
for(i=0; i<num; i++)
{
printf("%s ",row[i]);
}
printf("\n");
}
//释放结果集
mysql_free_result(results);
}
//释放资源
mysql_close(mysql);
return 0;
}
mysql简单客户端程序的代码实现
最新推荐文章于 2022-09-21 17:35:59 发布