VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (三)

原创 2017年04月20日 15:25:51

接下来,我们要学习编写一个错误处理函数。咱们的代码中都是通过检查调用的 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;
}

光明兄弟



75.笔记 MySQL学习——C编写MySQL程序八一次执行多条SQL

75.笔记 MySQL学习——C编写MySQL程序八一次执行多条SQL MYSQL支持一次执行多语句,可以把一个由分号隔开的多条语句构成的字符串发送给服务器,然后依次检索各个结果集。       ...
  • notbaron
  • notbaron
  • 2017-11-21 20:01:40
  • 124

linux 下MySQL的简单编程。

在使用mysql之前必须先要安装mysql  安装配置命令(ubuntu下): Mysql 服务器安装:apt-get install mysql-server Mysql 客户端安装:apt-...
  • weixin_41275048
  • weixin_41275048
  • 2018-01-31 13:29:23
  • 87

搞定linux上MySQL编程(六):C语言编写MySQL程序(结)

From:http://blog.csdn.net/shallnet/article/details/46485675         在实际应用中,我们不可能在命令行登录进数据库进行数据的...
  • It_BeeCoder
  • It_BeeCoder
  • 2017-05-06 21:40:48
  • 451

VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (一)

首先,我们必须下载 MySQL Server 5.1 。是那种完整安装包,安装后在 MySQL Server 的安装目录里要有 include 和 lib\debug 文件夹,其中必须包含开发 MyS...
  • gmbros
  • gmbros
  • 2017-02-23 16:47:39
  • 450

VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (二)

连接/断开MySQL数据库服务器 好,我们接着上一篇继续编写第一个 MySQL 数据库应用程序。接下来,我们要写代码连接到 MySQL 的数据库服务器。需要说明一下,我们通过一本书,叫《My...
  • gmbros
  • gmbros
  • 2017-03-06 16:50:47
  • 477

<em>mysql</em>数据库<em>程序</em>设计

举报人: 被举报人: taojianfei819 举报的资源分: 3 *类型: *详细原因: 取  消 提  交 <em>mysql</em>数据库<em>程序</em>设计 3积分 立即下载 ...
  • 2018年04月08日 00:00

编写mysql插件

查看mysql插件so目录进入mysql后执行如下指令SHOW VARIABLES LIKE 'plugin_dir'; 显示plugin_dir =/usr/local/mysql/lib/plug...
  • qqqq123qqqqqqq
  • qqqq123qqqqqqq
  • 2017-03-27 14:52:57
  • 1061

MySQL Server 5.1绿色版

  • 2015年09月02日 21:33
  • 11.75MB
  • 下载

mysql 出现2003- cant connect to MYSQL server on localhost 的解决办法

mysql出现下面的错误: 解决办法是:win+R 输入:services.msc将mysql的服务启动后问题解决。如图:...
  • zl544434558
  • zl544434558
  • 2014-02-24 17:59:43
  • 3208

在MYSQL里教你写一个存储过程

它。  一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的...
  • USBdrivers
  • USBdrivers
  • 2014-05-05 13:10:52
  • 5094
收藏助手
不良信息举报
您举报文章:VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (三)
举报原因:
原因补充:

(最多只允许输入30个字)