1. 程式人生 > >C語言簡單操作MYSQL資料庫的增刪查詢

C語言簡單操作MYSQL資料庫的增刪查詢

#include<stdio.h>
#include<mysql.h>   //所需標頭檔案
#include<string.h>
#include<stdlib.h>

MYSQL *conn_prt;     //創造一個MYSQL控制代碼
MYSQL_RES *res;
MYSQL_ROW row;

/*一些操作的命令起始部分*/
char select_head[50] = "select * from ";
char desc_head[50] = "desc ";
char insert_head[200] = "insert into ";
char drop_msg_head[50] = "delete from ";
char change_base_head[50] = "use ";

/*初始化mysql控制代碼*/
void self_init()
{
	conn_prt = mysql_init(NULL);
}

/*連線mysql資料庫*/
void self_connect()
{
	/*假設我的雲伺服器IP為118.89.20.60,密碼為123456,進入的資料庫名字為zje*/
	if(!mysql_real_connect(conn_prt,"118.89.20.60","root",
		"123456","zje",0,NULL,0))
	{
		printf("failed to connect:%s\n",mysql_error(conn_prt));
		exit(0) ;
	}
	printf("connect success!\n");

	/*如果本機測試的話,上面的語句可改為*/
	/*
		printf("本機測試\n");
		if(!mysql_real_connect(conn_prt,"localhost","root",
			"123456","zje",0,NULL,0))
		{
			printf("failed to connect:%s\n",mysql_error(conn_prt));
			exit(0) ;
		}
		printf("connect success!\n");
	*/
}

/*列印某個資料庫中的某個表*/
void print_table()
{
	int t;
	char table_name[50];
	char query[50];
	bzero(query,50);
	bzero(table_name,50);

	strcpy(query,select_head);

	puts("please enter table name:");
	scanf("%s",table_name);

	strcat(query,table_name);
	t = mysql_real_query(conn_prt,query,strlen(query));
	if(t)
	{
		printf("failed to query:%s\n",mysql_error(conn_prt));
		return ;
	}
	printf("query success!\n");

	res = mysql_store_result(conn_prt);
	while(row = mysql_fetch_row(res))
	{
		for(t = 0;t<mysql_num_fields(res);t++)
		{
			printf("%s\t",row[t]);
		}
		printf("\n");
	}

	return ;

}

/*列印某個表的欄位有哪些*/
void desc_table()
{
	int t;
	char table_name[50];
	char desc_query[50];
	bzero(table_name,50);
	bzero(desc_query,50);

	strcpy(desc_query,desc_head);

	puts("please enter the table name:");
	scanf("%s",table_name);

	strcat(desc_query,table_name);

	t = mysql_real_query(conn_prt,desc_query,strlen(desc_query));
	if(t)
	{
		printf("failed to query:%s\n",mysql_error(conn_prt));
		return ;
	}
	res = mysql_store_result(conn_prt);
	while(row = mysql_fetch_row(res))
	{
		for(t = 0;t<mysql_num_fields(res);t++)
		{
			printf("%s\t",row[t]);
		}
		printf("\n");
	}
	return ;
}

/*往某個表中插入資料*/
void insert_msg()
{
	int t;
	char insert_query[200];
	char table_name[50];
	char field[100];
	char left[5]="(";
	char right[5]=") ";
	char values[50]="values";
	char message[200]={0};

	bzero(field,100);
	bzero(table_name,50);
	bzero(message,200);

	strcpy(insert_query,insert_head);   //insert into

	puts("please enter table_name:");
	scanf("%s",table_name);

	puts("please enter the Field you want to write:(以逗號分隔)");
	scanf("%s",field);

	puts("please write the message to the field:(以逗號分隔)");
	scanf("%s",message);

	/*把幾個變數字串連線成一個完整的mysql命令*/
	strcat(insert_query,table_name);
	strcat(insert_query,left);
	strcat(insert_query,field);
	strcat(insert_query,right);
	strcat(insert_query,values);
	strcat(insert_query,left);
	strcat(insert_query,message);
	strcat(insert_query,right);
	printf("%s\n",insert_query);

	t = mysql_real_query(conn_prt,insert_query,strlen(insert_query));
	if(t)
	{
		printf("failed to query:%s\n",mysql_error(conn_prt));
		return ;
	}

	printf("OK\n");
}

/*刪除某個表中的某個資料,以名字為基準*/
void drop_msg_table()
{
	int t;
	char drop_query[200]={0};
	char table_name[20]={0};
	char del_name[20]={0};

	strcpy(drop_query,drop_msg_head);

	puts("please enter the table:");
	scanf("%s",table_name);

	puts("please enter del name:");
	scanf("%s",del_name);

	strcat(drop_query,table_name);
	strcat(drop_query," where name =\"");
	strcat(drop_query,del_name);
	strcat(drop_query,"\"");
	printf("%s\n",drop_query);

	t = mysql_real_query(conn_prt,drop_query,strlen(drop_query));
	if(t)
	{
		printf("failed to query:%s\n",mysql_error(conn_prt));
		return ;
	}

	printf("OK\n");
	return ;
}

/*改變身處的資料庫*/
void change_base()
{
	int t;
	char change_based_query[100]={0};
	char base_name[20]={0};
	strcpy(change_based_query,change_base_head);

	puts("please enter the base name you want to change:");
	scanf("%s",base_name);

	strcat(change_based_query,base_name);

	t = mysql_real_query(conn_prt,change_based_query,strlen(change_based_query));
	if(t)
	{
		printf("failed to query:%s\n",mysql_error(conn_prt));
		return ;
	}
	printf("OK\n");
	return ;
}

/*列印某個資料庫中有哪些表*/
void show_all_tables()
{
	int t;
	char query[50] ="show tables";
	t = mysql_real_query(conn_prt,query,strlen(query));
	if(t)
	{
		printf("failed to query:%s\n",mysql_error(conn_prt));
		return ;
	}
	
	res = mysql_store_result(conn_prt);
	while(row = mysql_fetch_row(res))
	{
		for(t = 0;t<mysql_num_fields(res);t++)
		{
			printf("%s\t",row[t]);
		}
		printf("\n");
	}
	return ;
}

/*列印存在的所有資料庫*/
void show_all_bases()
{
	int t;
	char query[50] ="show databases";
	t = mysql_real_query(conn_prt,query,strlen(query));
	if(t)
	{
		printf("failed to query:%s\n",mysql_error(conn_prt));
		return ;
	}
	
	res = mysql_store_result(conn_prt);
	while(row = mysql_fetch_row(res))
	{
		for(t = 0;t<mysql_num_fields(res);t++)
		{
			printf("%s\t",row[t]);
		}
		printf("\n");
	}
	return ;
}

char dir[200] ={"   \
\t1.打印表       \
\t2.查詢某個表的格式 \
\t3.往某個表插入資料\n	\
\t4.刪除某表的某一資料		\
\t5.選擇另外一個數據庫		\
\t\n6.顯示所有表  \
\t 7.顯示所有資料庫	\
"};

int main()
{
	self_init();
	self_connect();
	printf("%s\n",dir);
	int type;
	while(1)
	{
		puts("please choice option:");
		scanf("%d",&type);
		switch(type)
		{
			case 1:print_table();break;
			case 2:desc_table();break;
			case 3:insert_msg();break;
			case 4:drop_msg_table();break;
			case 5:change_base();break;
			case 6:show_all_tables();break;
			case 7:show_all_bases();break;
		}
	}

	return 0;
}