vc操纵mysql数据库

15 篇文章 0 订阅

1、准备工作
MySQL数据库安装之后在D:\mysql\lib
目录下有所需要的各种文件,我们需要的只是以下几个:
libmysql.lib  拷贝到   C:\Program Files\Microsoft Visual Studio\VC98\Lib
libmysql.dll  拷贝到 当前项目debug目录  C:\Users\Administrator\Desktop\mysql\Debug

 

 

同时需要D:\mysql\include
目录下的几个文件:
mysql_version.h
my_list.h
mysql_com.h
mysql_time.h
mysql.h
my_alloc.h
typelib.h
拷贝到C:\Program Files\Microsoft Visual Studio\VC98\Include

 

另一种解决方案

/*

1)、新建一个工程,随便写一个helloworld,目的是就是让工程下的“debug”文件夹出现
2)、把C:\Program Files\MySQL\MySQL Server 5.5\lib下面的libmysql.dll复制到工程的debug文件夹里面
3)、接下来要设置一些引用文件的环境变量,首先,点击项目->属性->vc++目录。
然后“include目录”那把“C:\Program Files\MySQL\MySQL Server 5.5\include”给加进来
再然后“lib目录”那里把“C:\Program Files\MySQL\MySQL Server 5.5\lib”也一起加进来。Lib目录下有debug目录,选debug。(C:\Program Files\MySQL\MySQL Server 5.5\lib\debug)。

4)、然后在项目->属性窗口下点击:连接器->输入->附加依赖项,把"libmysql.lib"写进去

5)、在stdafx.h里面添加如下的内容:
#include "mysql.h"

#include "winsock.h" // 如果编译出错,则把该行放到#include "mysql.h"之前

*/

 

//vc6.0编译成功 无错  复制代码的时候注意编码全角半角问题
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32")
#pragma comment(lib, "libmysql")
#include "mysql.h" 
int main(int argc, char* argv[])
{
int res,j;
    MYSQL mysql;
    MYSQL_RES *resultset;
    MYSQL_ROW row; 
    mysql_init(&mysql);// 初始化mysql结构 
//连接本机,用户名是root,密码是hope,数据库是hope,端口是3306
    if (!mysql_real_connect(&mysql, "localhost", "root", "hope", "hope", 3306, NULL, 0))
 //if (!mysql_real_connect(&mysql, "localhost", "root", "hope",NULL, 3306, NULL, 0))  数据库也可以不指派,但是后面表名要加上库名   hope.student

    {
        printf("\n数据库连接发生错误!");
    }
    else
    {
        printf("\n数据库连接成功!\n");  //插入一条数据到数据库

      res = mysql_query(&mysql, "insert into student(name,age,rollno) values('elisa',33,'3')");
        if(!res)
        {
             printf("插入%lu行数据成功!\n",(unsigned long)mysql_affected_rows(&mysql));
        }
        else printf("插入数据失败!\n"); 
  
/*ddl语句---支持ddl
  res = mysql_query(&mysql, "truncate table student");
    if(!res)
        {
             printf("清空数据成功!\n");
        }
        else printf("清空数据失败!\n");
 */
        if(mysql_query(&mysql,"select * from student"))
{
printf("数据库查询发生错误");
}
else
{                   
          //检索数据
           printf("\n查询数据为:\n");        
           resultset = mysql_store_result(&mysql);// 获得结果集        
           if (mysql_num_rows(resultset) != NULL)
           {
            int numRows = mysql_num_rows(resultset); // 获得结果集中的记录数
            int numFields = mysql_num_fields(resultset);// 获得表中字段数
            printf("共 %d 行记录,每行 %d 个字段。", numRows, numFields);
             j = 1;
                while (row = mysql_fetch_row(resultset))
                {
                    int i = 0;
                    printf("\n 第 %d 行:", j);
                    for (i = 0; i < numFields; i++)
                    {
                        fprintf(stdout, " %s", row[i]); // 打印字段值
                    }
                    j++;
                 }
           }
           else
           {
               printf("\n无查询结果!");
           }
           mysql_free_result(resultset);  // 释放结果集
       }
    } 
    mysql_close(&mysql); // 释放数据库连接
  fgetchar();
  return 0;
}

 


数据库连接成功!
插入1行数据成功!

查询数据为:
共 4 行记录,每行 3 个字段。
 第 1 行: elisa 33 3
 第 2 行: elisa 33 3
 第 3 行: elisa 33 3
 第 4 行: elisa 33 3

 

 

//vc6.0编译成功 无措  复制代码的时候注意编码全角半角问题
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <winsock2.h>w
#pragma comment(lib, "ws2_32")
#pragma comment(lib, "libmysql")
#include "mysql.h" 
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
  int res,j;
    string str;
    MYSQL mysql;
 //char *sql;
    MYSQL_RES *resultset;
    MYSQL_ROW row; 
    mysql_init(&mysql);// 初始化mysql结构 
//连接本机,用户名是root,密码是hope,数据库是hope,端口是3306
    if (!mysql_real_connect(&mysql, "localhost", "root", "hope", NULL, 3306, NULL, 0))
    {
        printf("\n数据库连接发生错误!");
    }
    else
    {
        printf("\n数据库连接成功!\n");  //插入一条数据到数据库

   getline(cin,str);
   cout<<str;
    const char *sql=str.data();
  res = mysql_query(&mysql,sql);
        if(!res)
        {
             printf("插入%lu行数据成功!\n",(unsigned long)mysql_affected_rows(&mysql));
        }
        else printf("插入数据失败!\n"); 
  
/*ddl语句
  res = mysql_query(&mysql, "truncate table student");
    if(!res)
        {
             printf("清空数据成功!\n");
        }
        else printf("清空数据失败!\n");
 */
        if(mysql_query(&mysql,"select * from hope.student"))
  {
          printf("数据库查询发生错误");
  }
      else
   {                   
          //检索数据
           printf("\n查询数据为:\n");        
           resultset = mysql_store_result(&mysql);// 获得结果集        
           if (mysql_num_rows(resultset) != NULL)
           {
            unsigned __int64 numRows = mysql_num_rows(resultset); // 获得结果集中的记录数
            int numFields = mysql_num_fields(resultset);// 获得表中字段数
            printf("共 %d 行记录,每行 %d 个字段。", numRows, numFields);
             j = 1;
                while (row = mysql_fetch_row(resultset))
                {
                    int i = 0;
                    printf("\n 第 %d 行:", j);
                    for (i = 0; i < numFields; i++)
                    {
                        fprintf(stdout, " %s", row[i]); // 打印字段值
                    }
                    j++;
                 }
           }
           else
           {
               printf("\n无查询结果!");
           }
           mysql_free_result(resultset);  // 释放结果集
       }
    } 
    mysql_close(&mysql); // 释放数据库连接
  fgetchar();
  return 0;
}

 

 

 

 

其他的一些操作

 

VC++连MySQL中要用到的MySQL函数:

MYSQL* mysql_init(NULL) //初始化一个MYSQL对象,后面的操作要用到

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag) //建立连接,db是要访问的数据库,unix_socket和client_flag通常为NULL就可以了.连接成功返回第一个参数,否则失败

nt mysql_query(MYSQL *mysql, const char *stmt_str) //执行一个查询,成功时返回0

MYSQL_RES *mysql_store_result(MYSQL *mysql) //获取查询返回的结果集,失败时返回0

unsigned int mysql_num_fields(MYSQL_RES *result) //获取返回结果集的字段数量

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) //获取一行记录,并将移动到下个记录,返回NULL时则遍历完了所有行或出错.MYSQL_ROW类型是个字符串数组,下标为[0,columnLength-1]

void mysql_free_result(MYSQL_RES *result) //释放结果集

void mysql_close(MYSQL *mysql) //关闭连接

这里是具体代码(写的很粗哈~测试嘛~)

 
 
  1. MYSQL mysql;
  2. mysql_init(&mysql);
  3. ASSERT(mysql_real_connect(&mysql, "127.0.0.1", "alacky", "password", "Test", 3306, 0, 0));
  4. ASSERT(mysql_query(&mysql, "SELECT * FROM maxTest") == 0);
  5. MYSQL_RES *result;
  6. result = mysql_store_result(&mysql);
  7. MYSQL_ROW row;
  8. ULONG colLen = mysql_num_fields(result);
  9. CString datas = "";
  10. while(row = mysql_fetch_row(result))

遍历每行记录

 
 
  1. {
  2. for(ULONG i=0; i<colLen; i++)
  3. {
  4. datas += row[i] ? row[i] : "NULL";
  5. datas += "\t";
  6. }
  7. datas += "\n\n";
  8. }
  9. mysql_free_result(result);
  10. mysql_close(&mysql);

附MySQL的API接口

  1. mysql_affected_rows() 返回被最新的UPDATE,DELETEINSERT查询影响的行数。 
  2. mysql_close() 关闭一个服务器连接。 
  3. mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。 
  4. mysql_change_user() 改变在一个打开的连接上的用户和数据库。 
  5. mysql_create_db() 创建一个数据库。该函数不推荐;而使用SQL命令CREATEDATABASE。 
  6. mysql_data_seek() 在一个查询结果集合中搜寻一任意行。 
  7. mysql_debug() 用给定字符串做一个DBUG_PUSH。 
  8. mysql_drop_db() 抛弃一个数据库。该函数不推荐;而使用SQL命令DROPDATABASE。 
  9. mysql_dump_debug_info() 让服务器将调试信息写入日志文件。 
  10. mysql_eof() 确定是否已经读到一个结果集合的最后一行。这功能被反对; mysql_errno()或mysql_error()可以相反被使用。 
  11. mysql_errno() 返回最近被调用的MySQL函数的出错编号。 
  12. mysql_error() 返回最近被调用的MySQL函数的出错消息。 
  13. mysql_escape_string() 用在SQL语句中的字符串的转义特殊字符。 
  14. mysql_fetch_field() 返回下一个表字段的类型。 
  15. mysql_fetch_field_direct () 返回一个表字段的类型,给出一个字段编号。 
  16. mysql_fetch_fields() 返回一个所有字段结构的数组。 
  17. mysql_fetch_lengths() 返回当前行中所有列的长度。 
  18. mysql_fetch_row() 从结果集合中取得下一行。 
  19. mysql_field_seek() 把列光标放在一个指定的列上。 
  20. mysql_field_count() 返回最近查询的结果列的数量。 
  21. mysql_field_tell() 返回用于最后一个mysql_fetch_field()的字段光标的位置。 
  22. mysql_free_result() 释放一个结果集合使用的内存。 
  23. mysql_get_client_info() 返回客户版本信息。 
  24. mysql_get_host_info() 返回一个描述连接的字符串。 
  25. mysql_get_proto_info() 返回连接使用的协议版本。 
  26. mysql_get_server_info() 返回服务器版本号。 
  27. mysql_info() 返回关于最近执行得查询的信息。 
  28. mysql_init() 获得或初始化一个MYSQL结构。 
  29. mysql_insert_id() 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。 
  30. mysql_kill() 杀死一个给定的线程。 
  31. mysql_list_dbs() 返回匹配一个简单的正则表达式的数据库名。 
  32. mysql_list_fields() 返回匹配一个简单的正则表达式的列名。 
  33. mysql_list_processes() 返回当前服务器线程的一张表。 
  34. mysql_list_tables() 返回匹配一个简单的正则表达式的表名。 
  35. mysql_num_fields() 返回一个结果集合重的列的数量。 
  36. mysql_num_rows() 返回一个结果集合中的行的数量。 
  37. mysql_options() 设置对mysql_connect()的连接选项。 
  38. mysql_ping() 检查对服务器的连接是否正在工作,必要时重新连接。 
  39. mysql_query() 执行指定为一个空结尾的字符串的SQL查询。 
  40. mysql_real_connect() 连接一个MySQL服务器。 
  41. mysql_real_query() 执行指定为带计数的字符串的SQL查询。 
  42. mysql_reload() 告诉服务器重装授权表。 
  43. mysql_row_seek() 搜索在结果集合中的行,使用从mysql_row_tell()返回的值。 
  44. mysql_row_tell() 返回行光标位置。 
  45. mysql_select_db() 连接一个数据库。 
  46. mysql_shutdown() 关掉数据库服务器。 
  47. mysql_stat() 返回作为字符串的服务器状态。 
  48. mysql_store_result() 检索一个完整的结果集合给客户。 
  49. mysql_thread_id() 返回当前线程的ID。 
  50. mysql_use_result() 初始化一个一行一行地结果集合的检索。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值