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) //关闭连接
这里是具体代码(写的很粗哈~测试嘛~)
- MYSQL mysql;
- mysql_init(&mysql);
- ASSERT(mysql_real_connect(&mysql, "127.0.0.1", "alacky", "password", "Test", 3306, 0, 0));
- ASSERT(mysql_query(&mysql, "SELECT * FROM maxTest") == 0);
- MYSQL_RES *result;
- result = mysql_store_result(&mysql);
- MYSQL_ROW row;
- ULONG colLen = mysql_num_fields(result);
- CString datas = "";
- while(row = mysql_fetch_row(result))
遍历每行记录
- {
- for(ULONG i=0; i<colLen; i++)
- {
- datas += row[i] ? row[i] : "NULL";
- datas += "\t";
- }
- datas += "\n\n";
- }
- mysql_free_result(result);
- mysql_close(&mysql);
附MySQL的API接口
- mysql_affected_rows() 返回被最新的UPDATE,DELETE或INSERT查询影响的行数。
- mysql_close() 关闭一个服务器连接。
- mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。
- mysql_change_user() 改变在一个打开的连接上的用户和数据库。
- mysql_create_db() 创建一个数据库。该函数不推荐;而使用SQL命令CREATEDATABASE。
- mysql_data_seek() 在一个查询结果集合中搜寻一任意行。
- mysql_debug() 用给定字符串做一个DBUG_PUSH。
- mysql_drop_db() 抛弃一个数据库。该函数不推荐;而使用SQL命令DROPDATABASE。
- mysql_dump_debug_info() 让服务器将调试信息写入日志文件。
- mysql_eof() 确定是否已经读到一个结果集合的最后一行。这功能被反对; mysql_errno()或mysql_error()可以相反被使用。
- mysql_errno() 返回最近被调用的MySQL函数的出错编号。
- mysql_error() 返回最近被调用的MySQL函数的出错消息。
- mysql_escape_string() 用在SQL语句中的字符串的转义特殊字符。
- mysql_fetch_field() 返回下一个表字段的类型。
- mysql_fetch_field_direct () 返回一个表字段的类型,给出一个字段编号。
- mysql_fetch_fields() 返回一个所有字段结构的数组。
- mysql_fetch_lengths() 返回当前行中所有列的长度。
- mysql_fetch_row() 从结果集合中取得下一行。
- mysql_field_seek() 把列光标放在一个指定的列上。
- mysql_field_count() 返回最近查询的结果列的数量。
- mysql_field_tell() 返回用于最后一个mysql_fetch_field()的字段光标的位置。
- mysql_free_result() 释放一个结果集合使用的内存。
- mysql_get_client_info() 返回客户版本信息。
- mysql_get_host_info() 返回一个描述连接的字符串。
- mysql_get_proto_info() 返回连接使用的协议版本。
- mysql_get_server_info() 返回服务器版本号。
- mysql_info() 返回关于最近执行得查询的信息。
- mysql_init() 获得或初始化一个MYSQL结构。
- mysql_insert_id() 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。
- mysql_kill() 杀死一个给定的线程。
- mysql_list_dbs() 返回匹配一个简单的正则表达式的数据库名。
- mysql_list_fields() 返回匹配一个简单的正则表达式的列名。
- mysql_list_processes() 返回当前服务器线程的一张表。
- mysql_list_tables() 返回匹配一个简单的正则表达式的表名。
- mysql_num_fields() 返回一个结果集合重的列的数量。
- mysql_num_rows() 返回一个结果集合中的行的数量。
- mysql_options() 设置对mysql_connect()的连接选项。
- mysql_ping() 检查对服务器的连接是否正在工作,必要时重新连接。
- mysql_query() 执行指定为一个空结尾的字符串的SQL查询。
- mysql_real_connect() 连接一个MySQL服务器。
- mysql_real_query() 执行指定为带计数的字符串的SQL查询。
- mysql_reload() 告诉服务器重装授权表。
- mysql_row_seek() 搜索在结果集合中的行,使用从mysql_row_tell()返回的值。
- mysql_row_tell() 返回行光标位置。
- mysql_select_db() 连接一个数据库。
- mysql_shutdown() 关掉数据库服务器。
- mysql_stat() 返回作为字符串的服务器状态。
- mysql_store_result() 检索一个完整的结果集合给客户。
- mysql_thread_id() 返回当前线程的ID。
- mysql_use_result() 初始化一个一行一行地结果集合的检索。