【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysql客户端
2023-09-14 08:57:16 时间
div >
【送给在路上的程序员】
对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。
对于一个架构师而言,掌握各种语言的优势并可以利运用到系统中,由此简化系统的开发,是其架构生涯的第一步。
对于一个开发团队而言,能够在短期内开发出用户满意的软件系统是其核心竞争力的体现。
每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我。
void init_db(); int conn_db(const char *hostname, const char *username, const char *password, const char *dbname); void disconn_db(); int open_db(const char *SQL); int exec_db(const char *SQL); #endif /* MYDB_H_ */
int conn_db(const char *hostname, const char *username, const char *password, const char *dbname) if (connection) mysql_close(connection); connection = mysql_real_connect( mysql, hostname, username, password, dbname, 0, 0, 0);//连接到mysql if (connection == NULL) printf("%s\n", mysql_error( mysql)); return -1;//连接失败,返回-1 printf("success connect to mysql\n"); return 0; void disconn_db()//断开数据库连接 if (connection) mysql_close(connection); connection = NULL; int open_db(const char *SQL)//执行有返回数据集的SQL语句 int state = mysql_query(connection, SQL);//执行SQL语句 if (state != 0) printf("%s\n", mysql_error(connection)); return -1;//执行失败,返回-1 MYSQL_RES *result = mysql_store_result(connection);//得到查询结果 if (result == (MYSQL_RES *) NULL) printf("%s\n", mysql_error(connection)); return -1;//执行失败,返回-1 } else MYSQL_FIELD *sqlField; int iFieldCount = 0; while (1)//循环遍历所有字段 sqlField = mysql_fetch_field(result); if (sqlField == NULL) break; printf("%s\t", sqlField- name);//向屏幕打印字段名 iFieldCount++; printf("\n");//每一行结尾打印一个\n字符 MYSQL_ROW sqlRow; while (1)//循环到每一行 sqlRow = mysql_fetch_row(result); if (sqlRow == NULL) break; int i; for (i = 0; i iFieldCount; i++)//循环得到每一行中的每个字段 if (sqlRow[i] == NULL) printf("NULL\t");//如果值为NULL,屏幕打印为"NULL" else printf("%s\t", (const char *)sqlRow[i]);//屏幕打印为字段内容 printf("\n");//每一行结尾打印一个\n字符 printf("query is ok, %u rows affected\n", (unsigned int)mysql_affected_rows(connection)); mysql_free_result(result); return 0; int exec_db(const char *SQL)//执行没有返回数据集的SQL语句 int state = mysql_query(connection, SQL);//执行SQL语句 if (state != 0) printf("%s\n", mysql_error(connection)); return -1; printf("query is ok, %u rows affected\n", (unsigned int)mysql_affected_rows(connection)); return 0; }
if ((strncmp(src, "select", 6) == 0) || (strncmp(src, "SELECT", 6) == 0) || (strncmp(src, "show", 4) == 0) || (strncmp(src, "SHOW", 4) == 0) || (strncmp(src, "desc", 4) == 0) || (strncmp(src, "DESC", 4) == 0)) open_db(src);//如果src为有返回数据集SQL语句,那么调用open_db函数 } else exec_db(src);//如果src为没有有返回数据集SQL语句,那么调用exec_db函数
write(STDOUT_FILENO, "mysql1 ", strlen("mysql1 "));//屏幕输出命令提示符mysql1 memset(buf, 0, sizeof(buf)); read(STDIN_FILENO, buf, sizeof(buf));//等待用户从键盘输入 if (strncmp(buf, "quit", 4) == 0) break;//用户输入quit,循环break; sqldb(buf); disconn_db();//断开数据库连接
//system("stty erase ^H");//执行shell命令,也可以 用来设置读取用户键盘输入的时候,退格键不回显 struct termios term; if(tcgetattr(STDIN_FILENO, term) == -1)//得到系统termion的设置 printf("tcgetattr error is %s\n", strerror(errno)); return; oldterm = term;//保留当前termios设置,以便程序退出的时候可以恢复termios term.c_lflag = ~ICANON;//取消ICANON选项(不规范输入) term.c_lflag |= ICANON;//设置ICANON选项(规范输入) term.c_cc字段为要设置的具体特殊输入字符,如c_cc[VERASE]代表退格键, term.c_cc[VERASE] = \b;意思为把退格键修改为\b VERASE代表向前擦出一个字符,VINTR代表发送ctrl + C中断信号,ctrl + c的ASCII码为3 例如:term.c_cc[VINTR] = \t;意思为将tab键设置为终端信号 tcsetattr中,第二个参数说明,TCSAFLUSH:发送了所有输出后更改才生效,在更改发生时,未读取的所有输入数据都被删除 TCSANOW:更改立即生效 TCSADRAIN:发送了所有输出后更改才发生,如果更改输出参数则应该使用该选项 term.c_cc[VERASE] = \b;//\b为退格键的ASCII码 if (tcsetattr(STDIN_FILENO, TCSANOW, term) == -1)//设置系统termion printf("tcsetattr error is %s\n", strerror(errno)); return; void returnstty()//恢复系统的termios设置 if (tcsetattr(STDIN_FILENO, TCSAFLUSH, oldterm) == -1)//设置系统termion printf("tcsetattr error is %s\n", strerror(errno)); return;
【送给在路上的程序员】
对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。
对于一个架构师而言,掌握各种语言的优势并可以利运用到系统中,由此简化系统的开发,是其架构生涯的第一步。
对于一个开发团队而言,能够在短期内开发出用户满意的软件系统是其核心竞争力的体现。
每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我。
void init_db(); int conn_db(const char *hostname, const char *username, const char *password, const char *dbname); void disconn_db(); int open_db(const char *SQL); int exec_db(const char *SQL); #endif /* MYDB_H_ */
mydb.c
int conn_db(const char *hostname, const char *username, const char *password, const char *dbname) if (connection) mysql_close(connection); connection = mysql_real_connect( mysql, hostname, username, password, dbname, 0, 0, 0);//连接到mysql if (connection == NULL) printf("%s\n", mysql_error( mysql)); return -1;//连接失败,返回-1 printf("success connect to mysql\n"); return 0; void disconn_db()//断开数据库连接 if (connection) mysql_close(connection); connection = NULL; int open_db(const char *SQL)//执行有返回数据集的SQL语句 int state = mysql_query(connection, SQL);//执行SQL语句 if (state != 0) printf("%s\n", mysql_error(connection)); return -1;//执行失败,返回-1 MYSQL_RES *result = mysql_store_result(connection);//得到查询结果 if (result == (MYSQL_RES *) NULL) printf("%s\n", mysql_error(connection)); return -1;//执行失败,返回-1 } else MYSQL_FIELD *sqlField; int iFieldCount = 0; while (1)//循环遍历所有字段 sqlField = mysql_fetch_field(result); if (sqlField == NULL) break; printf("%s\t", sqlField- name);//向屏幕打印字段名 iFieldCount++; printf("\n");//每一行结尾打印一个\n字符 MYSQL_ROW sqlRow; while (1)//循环到每一行 sqlRow = mysql_fetch_row(result); if (sqlRow == NULL) break; int i; for (i = 0; i iFieldCount; i++)//循环得到每一行中的每个字段 if (sqlRow[i] == NULL) printf("NULL\t");//如果值为NULL,屏幕打印为"NULL" else printf("%s\t", (const char *)sqlRow[i]);//屏幕打印为字段内容 printf("\n");//每一行结尾打印一个\n字符 printf("query is ok, %u rows affected\n", (unsigned int)mysql_affected_rows(connection)); mysql_free_result(result); return 0; int exec_db(const char *SQL)//执行没有返回数据集的SQL语句 int state = mysql_query(connection, SQL);//执行SQL语句 if (state != 0) printf("%s\n", mysql_error(connection)); return -1; printf("query is ok, %u rows affected\n", (unsigned int)mysql_affected_rows(connection)); return 0; }
mysql1.c
if ((strncmp(src, "select", 6) == 0) || (strncmp(src, "SELECT", 6) == 0) || (strncmp(src, "show", 4) == 0) || (strncmp(src, "SHOW", 4) == 0) || (strncmp(src, "desc", 4) == 0) || (strncmp(src, "DESC", 4) == 0)) open_db(src);//如果src为有返回数据集SQL语句,那么调用open_db函数 } else exec_db(src);//如果src为没有有返回数据集SQL语句,那么调用exec_db函数
write(STDOUT_FILENO, "mysql1 ", strlen("mysql1 "));//屏幕输出命令提示符mysql1 memset(buf, 0, sizeof(buf)); read(STDIN_FILENO, buf, sizeof(buf));//等待用户从键盘输入 if (strncmp(buf, "quit", 4) == 0) break;//用户输入quit,循环break; sqldb(buf); disconn_db();//断开数据库连接
//system("stty erase ^H");//执行shell命令,也可以 用来设置读取用户键盘输入的时候,退格键不回显 struct termios term; if(tcgetattr(STDIN_FILENO, term) == -1)//得到系统termion的设置 printf("tcgetattr error is %s\n", strerror(errno)); return; oldterm = term;//保留当前termios设置,以便程序退出的时候可以恢复termios term.c_lflag = ~ICANON;//取消ICANON选项(不规范输入) term.c_lflag |= ICANON;//设置ICANON选项(规范输入) term.c_cc字段为要设置的具体特殊输入字符,如c_cc[VERASE]代表退格键, term.c_cc[VERASE] = \b;意思为把退格键修改为\b VERASE代表向前擦出一个字符,VINTR代表发送ctrl + C中断信号,ctrl + c的ASCII码为3 例如:term.c_cc[VINTR] = \t;意思为将tab键设置为终端信号 tcsetattr中,第二个参数说明,TCSAFLUSH:发送了所有输出后更改才生效,在更改发生时,未读取的所有输入数据都被删除 TCSANOW:更改立即生效 TCSADRAIN:发送了所有输出后更改才发生,如果更改输出参数则应该使用该选项 term.c_cc[VERASE] = \b;//\b为退格键的ASCII码 if (tcsetattr(STDIN_FILENO, TCSANOW, term) == -1)//设置系统termion printf("tcsetattr error is %s\n", strerror(errno)); return; void returnstty()//恢复系统的termios设置 if (tcsetattr(STDIN_FILENO, TCSAFLUSH, oldterm) == -1)//设置系统termion printf("tcsetattr error is %s\n", strerror(errno)); return;
|========== 吴英强CSDN博客专栏==========|
|== C/C++学院 专栏文章的内容(不定期更新)===|
|== linux驱动开发 探索linux底层的奥秘 ========|
|== Java基础学习篇 掌握java语言的基础知识=====|
|====== 每天进步一点点,健康快乐每一天 ======|
相关文章
- 利用MySQL格式化时间函数简化时间操作(mysql格式化时间函数)
- MySQL文件导入:一步搞定数据库导入(mysql文件导入数据库)
- MySQL服务器安装指南(如何安装mysql服务器)
- MySQL中的二进制数据处理(mysql二进制数据)
- 探究MySQL数据库的锁机制,掌握数据并发读写中的正确解锁方法。(mysql数据库锁机制)
- MySQL的删除语句SQL教程(mysql删除语句sql)
- 界面解决MySQL安装没有服务界面的问题(mysql安装没有服务)
- MySQL数据库: 找寻最佳解决方案(mysql数据库技术答案)
- MySQL中实现两列值相加(mysql中两列值相加)
- 程序学习MySQL数据库编程,用C语言尽情(c 写mysql数据库)
- MySQL连接代码C语言实现(c mysql连接代码)
- MySQL读写改删使用C语言实现(c mysql读写改删)
- C语言与MySQL联合编程技术(c mysql 论码)
- C语言开发MySQL用户注册系统(c mysql注册)
- C语言和MySQL封装技术对比研究(c mysql封装的比较)
- MySQL汉字乱码问题解决方法分享(mysql个别汉字乱码)
- MySQL双表查询的优化技巧,大幅提高查询速度(mysql两表查询速度)
- MySQL示例教程快速上手C语言(c mysql demo)
- 窗口深入研究用CMD打开MySQL命令窗口(cmd打开mysql命令)
- 深入解析MySQL YY提升数据库设计与管理实践技能(mysql yy)