【C/C++學(xué)院】(22)Mysql數(shù)據(jù)庫(kù)編程--C語(yǔ)言操作數(shù)據(jù)庫(kù)
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-03-23 08:00:01 閱讀次數(shù):4033次
makefile
.SUFFIXES: .c .o
CC=gcc
SRCS=mysql1.c
OBJS=$(SRCS:.c=.o)
EXEC=mysql1
all: $(OBJS)
$(CC) -o $(EXEC) $(OBJS) -lmysqlclient
@echo '-------------ok--------------'
.c.o:
$(CC) -Wall -g -o $@ -c $<
clean:
rm -f $(OBJS)
rm -f core*
mysql1.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <termios.h>
#include <mysql/mysql.h>
#define BUFSIZE 1024
MYSQL mysql, *connection;
void deletename(char *SQL)
{
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要干掉的名字>:");
write(STDOUT_FILENO, SQL, strlen(SQL)); //這句話(huà)是替換printf函數(shù)的,這樣寫(xiě)就不需要
也能向屏幕輸出了
char name[1024];
memset(name, 0, sizeof(name));
read(STDIN_FILENO, name, sizeof(name)); //等待 用戶(hù)輸入要?jiǎng)h除的名字,假定用戶(hù)輸入的是"飯島愛(ài)"
name[strlen(name) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "DELETE FROM table1 WHERE name = '%s'", name); //
//SQL = DELETE FROM table1 WHERE name = '飯島愛(ài)'
printf("'%s'
", SQL);
}
void insertname(char *SQL)
{
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要插入的名字>:");
write(STDOUT_FILENO, SQL, BUFSIZE); //這句話(huà)是替換printf函數(shù)的,這樣寫(xiě)就不需要
也能向屏幕輸出了
char name[1024];
memset(name, 0, sizeof(name));
read(STDIN_FILENO, name, sizeof(name)); //等待 用戶(hù)輸入要插入的名字,假定用戶(hù)輸入的是"飯島愛(ài)"
name[strlen(name) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要插入的性別>:");
write(STDOUT_FILENO, SQL, strlen(SQL));
char sex[1024];
memset(sex, 0, sizeof(sex));
read(STDIN_FILENO, sex, sizeof(sex)); //等待 用戶(hù)輸入要插入的性別,
sex[strlen(sex) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要插入的年齡>:");
write(STDOUT_FILENO, SQL, strlen(SQL));
char age[1024];
memset(age, 0, sizeof(age));
read(STDIN_FILENO, age, sizeof(age)); //等待 用戶(hù)輸入要插入的年齡
age[strlen(age) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要插入的班級(jí)>:");
write(STDOUT_FILENO, SQL, strlen(SQL));
char classes[1024];
memset(classes, 0, sizeof(classes));
read(STDIN_FILENO, classes, sizeof(classes)); //等待 用戶(hù)輸入要插入的班級(jí)
classes[strlen(classes) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL,
"INSERT INTO table1 (name, sex, age, class) VALUES ('%s', '%s', %s, '%s')",
name, sex, age, classes); //
//SQL = DELETE FROM table1 WHERE name = '飯島愛(ài)'
printf("'%s'
", SQL);
}
void updatename(char *SQL)
{
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要修改的名字>:");
write(STDOUT_FILENO, SQL, strlen(SQL)); //這句話(huà)是替換printf函數(shù)的,這樣寫(xiě)就不需要
也能向屏幕輸出了
char name[1024];
memset(name, 0, sizeof(name));
read(STDIN_FILENO, name, sizeof(name)); //等待 用戶(hù)輸入要插入的名字,假定用戶(hù)輸入的是"飯島愛(ài)"
name[strlen(name) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要性別的性別>:");
write(STDOUT_FILENO, SQL, strlen(SQL));
char sex[1024];
memset(sex, 0, sizeof(sex));
read(STDIN_FILENO, sex, sizeof(sex)); //等待 用戶(hù)輸入要插入的性別,
sex[strlen(sex) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要年齡的年齡>:");
write(STDOUT_FILENO, SQL, strlen(SQL));
char age[1024];
memset(age, 0, sizeof(age));
read(STDIN_FILENO, age, sizeof(age)); //等待 用戶(hù)輸入要插入的年齡
age[strlen(age) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要修改的班級(jí)>:");
write(STDOUT_FILENO, SQL, strlen(SQL));
char classes[1024];
memset(classes, 0, sizeof(classes));
read(STDIN_FILENO, classes, sizeof(classes)); //等待 用戶(hù)輸入要插入的班級(jí)
classes[strlen(classes) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
sprintf(SQL,
"UPDATE table1 SET sex = '%s', age = %s, class = '%s' WHERE name = '%s'",
sex, age, classes, name); //
//SQL = DELETE FROM table1 WHERE name = '飯島愛(ài)'
printf("'%s'
", SQL);
}
void selectname(const char *SQL)
{
/*
char SQL[1024];
memset(SQL, 0, BUFSIZE);
sprintf(SQL, "%s", "請(qǐng)輸入要查詢(xún)的名字>:");
write(STDOUT_FILENO, SQL, strlen(SQL)); //這句話(huà)是替換printf函數(shù)的,這樣寫(xiě)就不需要
也能向屏幕輸出了
char name[1024];
memset(name, 0, sizeof(name));
read(STDIN_FILENO, name, sizeof(name)); //等待 用戶(hù)輸入要?jiǎng)h除的名字,假定用戶(hù)輸入的是"飯島愛(ài)"
name[strlen(name) - 1] = 0; //將字符串最后1位
替換為0,最后放的是整數(shù)0,而不是字符'0'
memset(SQL, 0, BUFSIZE);
if (strlen(name) == 0) //用戶(hù)沒(méi)有任何輸入,只是敲了回車(chē),長(zhǎng)度為0了
{
sprintf(SQL, "SELECT * FROM table2"); //
} else
{
sprintf(SQL, "SELECT * FROM table2 where name = '%s'", name); //
}
*/
if (mysql_query(connection, SQL) != 0)
{
printf("query error, %s
", mysql_error(&mysql));
}
//調(diào)用mysql_store_result得到查詢(xún)結(jié)果,結(jié)果放到MYSQL_RES結(jié)構(gòu)當(dāng)中
MYSQL_RES *result = mysql_store_result(connection);
//要知道返回?cái)?shù)據(jù)集有多少列才能自由的使用各種SELECT語(yǔ)句
MYSQL_FIELD *field;
int iFieldCount = 0;
while (1)
{
field = mysql_fetch_field(result); //循環(huán)得到列名,如果循環(huán)到了列的最后,函數(shù)返回NULL
if (field == NULL)
break;
printf("%s ", field->name);
iFieldCount++;
}
printf("
");
//循環(huán)遍歷每行
MYSQL_ROW row;
while (1)
{
row = mysql_fetch_row(result);
if (row == NULL)
break;
int i = 0;
for (; i < iFieldCount; i++)
{
printf("%s ", (const char *) row[i]);
}
printf("
");
}
mysql_free_result(result);
}
int main(int arg, char *args[])
{
if (arg < 4)
return ⑴;
mysql_init(&mysql); //相當(dāng)于SQL內(nèi)部初始化了1個(gè)TCP的socket,同時(shí)初始化了SQL必須的內(nèi)存和1些結(jié)構(gòu)
//連接到mysql server
connection = mysql_real_connect(&mysql, args[1], args[2], args[3], args[4],
0, 0, 0);
if (connection == NULL)
{
printf("connect error, %s
", mysql_error(&mysql));
return ⑴;
}
if (mysql_query(connection, "SET NAMES utf8") != 0) //設(shè)置字符集為UTF8
{
printf("設(shè)置字符集毛病, %s
", mysql_error(&mysql));
}
char buf[BUFSIZE];
memset(buf, 0, sizeof(buf));
strcpy(buf, "請(qǐng)選擇
1:插入
2:刪除
3:修改
4:查詢(xún)
");
write(STDOUT_FILENO, buf, strlen(buf));
memset(buf, 0, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf));
if (strncmp(buf, "4", 1) == 0) //輸入用戶(hù)輸入的是4
{
memset(buf, 0, sizeof(buf));
strcpy(buf, "請(qǐng)輸入任意SELECt語(yǔ)句");
write(STDOUT_FILENO, buf, strlen(buf));
memset(buf, 0, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf));
selectname(buf);
} else
{
if (strncmp(buf, "1", 1) == 0) //輸入用戶(hù)輸入的是1
{
insertname(buf);
}
if (strncmp(buf, "2", 1) == 0) //輸入用戶(hù)輸入的是2
{
deletename(buf);
}
if (strncmp(buf, "3", 1) == 0) //輸入用戶(hù)輸入的是3
{
updatename(buf);
}
mysql_query(connection, buf);
}
mysql_close(connection); //斷開(kāi)與SQL server的連接
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)