zoukankan      html  css  js  c++  java
  • C连接MySQL数据库开发之Windows环境配置及测试

    一、开发环境

    Win8.1 64位、VS2013、MySQL5.5.3764位

    MySQL安装目录为:C:Program FilesMySQLMySQL Server 5.5

    二、配置工程环境
    首先创建一个控制台空项目,打开VS2013,文件--> 新建项目 --> 常规 --> 选择“空项目”


          因为我们要使用MySQL数据库的API接口编程,所以需要将工程的附加头文件搜索目录和附件库文件搜索目录,指向MySQL安装目录对应的位置,下面是我机子上mysql库和头文件目录:


    将VS2013工程的附加头文件目录和附加库目录指向上面两个目录。

    1> 配置头文件目录
    打开工程配置属性窗口--> C/C++ --> 常规 --> 附加包含目录,把mysql的include目录添加到附加包含目录中,如下图所示:





    2> 配置库文件目录
    打开工程配置窗口--> 链接器--> 常归 --> 附加库目录,把mysql的lib目录添加到附加库目录中,如下图所示:


    打开工程配置窗口--> 链接器--> 输入-->附中依赖项,打libmysql.lib静态库添加到工程编译依赖项,如下图所示:





    libmysql.dll动态库拷贝到工程的根目录或Debug目录下:



    三、测试开发环境

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <mysql.h>
    
    void testQuery(MYSQL *mysql);	// 测试查询数据
    
    void main()
    {
    	MYSQL *mysql = NULL;
    
    	/*初始化MYSQL连接句柄*/
    	mysql = mysql_init((MYSQL *)0);
    	if (!mysql)
    	{
    		return;
    	}
    
    	/*
    		连接数据库,连接成功返回conn,否则返回NULL
    		参数1:mysql_init初始化数据库返回的MYSQL句柄
    		参数2:数据库服务器地址
    		参数3:数据库用户名
    		参数4:数据库密码
    		参数5:数据库名称
    		参数6:数据库端口,为0表示默认3306
    		参数7:如果unix_socket不是NULL,字符串指定套接字或应该被使用的命名管道。注意host参数决定连接的类型
    		参数8:通常是0
    	*/
    	mysql = mysql_real_connect(mysql, "localhost","root", "root", 
    		"test", 0, NULL, 0);
    	if (mysql)
    	{
    		printf("connection succellfull the database!
    ");
    	}
    	else
    	{
    		printf("connection error:%d, %s
    ",mysql_errno(mysql), mysql_error(mysql));
    	}
    
    	// 查询数据
    	testQuery(mysql);
    
    	// 关闭连接
    	mysql_close(mysql);
    
    	system("pause");
    }
    
    // 测试查询
    void testQuery(MYSQL *mysql)
    {
    	MYSQL_ROW row;
    	MYSQL_RES *res = NULL;
    	MYSQL_FIELD *fields = NULL;
    	int i, field_count;
    	char *sql = "select * from t_user";
    	int flag = mysql_real_query(mysql, sql, (unsigned long)strlen(sql));
    	if (flag)
    	{
    		printf("Query error:%d, %s
    ",mysql_errno(mysql), mysql_error(mysql));
    		return;
    	}
    
    	// 将查询结果读到内存当中
    	res = mysql_store_result(mysql);
    
    	// 获取结果集中的所有字段
    	fields = mysql_fetch_fields(res);
    
    	// 字段数量
    	field_count = mysql_field_count(mysql);
    	for (i = 0; i < field_count; i++)
    	{
    		printf("%s	", fields[i].name);
    	}
    
    	printf("
    ");
    	
    	// 遍历结果集的每一行数据
    	while (row = mysql_fetch_row(res))
    	{
    		for (i = 0; i < field_count; i++)
    		{
    			printf("%s	", row[i]);
    		}
    		printf("
    ");
    	}
    }

    mysql测试数据及表结构:

    DROP TABLE IF EXISTS `t_user`;
    CREATE TABLE `t_user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(32) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `address` varchar(100) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    LOCK TABLES `t_user` WRITE;
    INSERT INTO `t_user` VALUES (1,'zhangsan',22,'hunan'),(2,'lisi',30,'beijin');
    UNLOCK TABLES;
    测试结果:



    小结配置步聚:

    1> 安装mysql

    2> 创建VS工程,配置工程头文件(mysql.h所在目录)和库文件(libmysql.lib所在目录)附加目录,指向mysql对应的目录

    3> 将libmysql.dll动态库拷贝到工程根目录或Debug目录

    4> 编写测试程序,验证C连接Mysql数据库

    ----------------------------------------------------------------------优雅的分割线------------------------------------------------------------------------------------

    常见错误:

    1、main.obj : error LNK2019: 无法解析的外部符号 mysql_init。。。。。


    原因是没有在工程当中添加libmysql.lib配置,配置库文件目录


    2、无法启动此程序,因为计算机中丢失libmyslq.dll。。。。


    将libmysql.dll动态库拷贝到工程的根目录或Debug目录下。


    3、未引入windows.h头文件,因为在windows连接mysql是通过socket方式与数据库进行通信的



    4、main.obj : error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用.....

    数据库位数与编译位数不一致,导致在链接时mysql的库函数找不到,比如:我的mysql是64位,提供的库当然是64位的,如果你在VS上用32位的平台去编译就会造成链接时出错。



    修改编译平台,工程-->属性-->配置管理器-->在解决方案的工程列表中选择对应的项目,并将其修改成32位或64位,如果没有就新建一个。




    工程源码下载:Windows平台C连接MySQL数据库


    参考文档:

    C/C++连接MySql数据库


  • 相关阅读:
    汉语-成语:鳏寡孤惸
    汉语-汉字:谶
    汉语-汉字:彘
    汉语-汉字:齑、齏
    mac下配置adb
    常见的开发语言(或IT技术)一览
    SurfaceView的经典写法
    HDU4499 Cannon DFS 回溯的应用
    什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查
    Cocos开发中性能优化工具介绍之使用Windows任务管理器
  • 原文地址:https://www.cnblogs.com/xyang0917/p/4172500.html
Copyright © 2011-2022 走看看