VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (三)
来源:互联网 发布:logic pro x windows版 编辑:程序博客网 时间:2024/06/05 04:17
接下来,我们要学习编写一个错误处理函数。咱们的代码中都是通过检查调用的 MySQL 库函数的返回值来判断函数调用是否成功。返回指针的函数调用,判断返回值是否是一个空指针(NULL);返回整数值的函数调用,判断返回值是否是一个非零值。错误发生时,咱们只是调用 C 函数 fprint( ) 来向用户显示一行咱们自己定义的错误信息。其实 MySQL 库为咱们提供了三个函数调用,提供给我们更多 MySQL 特定的、更加具体的错误信息。这三个函数是:
mysql_error() :返回包含错误信息的字符串。
mysql_errno() :返回 MySQL 特定的错误代码。
mysql_sqlstate() :返回一个 SQLSTATE 代码。一个 SQLSTATE 值更加中立一些,因为它是基于 ANSL SQL 和 ODBC 标准,不是和特定的 SQL 数据库实现(比如 MySQL 数据库)相关。
以下是咱们要编写的错误报告函数:
static void print_error(MYSQL *conn, char *message){fprintf(stderr, "%s\n", message);if (conn != NULL){fprintf(stderr, "Error %u (%s): %s\n", mysql_errno(conn), mysql_sqlstate(conn), mysql_error(conn));}}
这个函数的好处是,我们不仅可以用它显示自定义错误信息,还可以显示 MySQL 库函数为咱们提供的更加具体的信息。请注意,这个函数的第一个参数是一个 MySQL 服务器连接句柄的指针,如果这个指针是一个有效的指针(不是空指针 NULL),咱们的程序就可以调用以上三个 MySQL 为咱们提供的函数来显示更多的信息。如果这个指针是一个空指针 NULL,那么这个错误报告函数就将仅显示咱们自己提供的自定义错误信息。因为在向 MySQL 服务器发出 SQL 查询语句之前,咱们需要调用 mysql_init ( ) 来得到一个 MySQL 服务器连接句柄,因为一些错误的发生,这个函数可能会返回一个空指针。这种情况下,咱们也可以在错误发生时,调用上边这个错误报告函数,向用户报错。
以下是用 print_error ( ) 代替调用 fprintf () 后的代码:
// exec_stmt.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <my_global.h> // 这个头文件必须是第一个被包含的文件 #include <my_sys.h>#include <mysql.h>#include <my_getopt.h>#include <m_string.h> // 需要的函数strdup()在这个头文件中声明static char *opt_host_name = NULL; // 服务器主机 (默认=localhost)static char *opt_user_name = "sampadm"; // 用户名 (默认=登陆名)static char *opt_password = "secret"; // 密码 (默认=无)static unsigned int opt_port_num = 0; // 端口号(使用内置值)static char *opt_socket_name = NULL; // 套接字名称 (使用内置值)static char *opt_db_name = "sampdb"; // 数据库名称(默认=无)static unsigned int opt_flags = 0; // 连接标志connection flags (无)static int ask_password = 0; // 是否请求密码static MYSQL *conn; // 连接数据库句柄的指针// ***** 函数声明 *****static void print_error(MYSQL *conn, char *message);// ********************static void print_error(MYSQL *conn, char *message){fprintf(stderr, "%s\n", message);if (conn != NULL){fprintf(stderr, "Error %u (%s): %s\n", mysql_errno(conn), mysql_sqlstate(conn), mysql_error(conn));}}int _tmain(int argc, _TCHAR* argv[]){ // 将一个全局变量指向程序的名称并调用my_init()。// 这个全局变量会被MySQL库用于错误信息中。// MY_INIT (argv[0]); // 执行一些设置操作my_init();// 初始化客户端库if (mysql_library_init(0, NULL, NULL)) {print_error(NULL, "mysql_library_init() falied");exit(1);}// 初始化连接句柄conn = mysql_init(NULL);if (conn == NULL) {print_error(NULL, "mysql_init() failed (probably out of memory)");exit(1);}// 连接到服务器if (mysql_real_connect(conn, opt_host_name, opt_user_name, opt_password, opt_db_name, opt_port_num, opt_socket_name, opt_flags) == NULL){print_error(conn, "mysql_real_connect() failed");mysql_close(conn);exit(1);}// ... 在这里发出查询语句并处理返回的结果 ...// 断开与服务器的连接mysql_close(conn);// 停止客户端库mysql_library_end(); return 0;}
光明兄弟
0 0
- VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (三)
- VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (一)
- VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (二)
- 用VS编写第一个C++程序
- 用VS编写第一个C++程序
- vs---编写第一个JavaScript程序
- 使用社区版VS创建第一个控制台程序
- 第一个控制台程序
- C++基础之--用VS编写第一个C++程序
- C++——用VS编写第一个C++程序
- 理解第一个MySQL的C++程序
- 创建第一个 Rails 程序(使用mysql)
- Scala基础入门(三)使用Scala IDE编写第一个Scala程序
- 编写第一个J2ME程序
- 编写第一个WINDOWS程序
- 编写第一个NDK程序
- 编写第一个lua程序
- 编写第一个ice程序
- 欢迎使用CSDN-markdown编辑器
- iOS 299美元企业账号申请流程及注意事项
- HM中AMP模式的快速算法
- CSS3 选择器—基本选择器
- 同时收到多家公司offer,怎样选择?
- VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (三)
- 模板_HDU2255奔小康赚大钱_最大权最大匹配问题_KM算法
- 《C++ primer plus》附录G:STL方法与函数(五) 学习笔记
- Shell实现读取ini格式配置文件方法
- Ubutun Linux下如何安装 USB-Serial的转换驱动?
- 关于团队管理的一些思考
- Eclipse 包含头文件 添加环境变量
- 4.20+Linux+netstat命令学习
- 获取本地时间,及对时间的处理