因为今天上午刚学了慕课上哈工大的数据库系统上的嵌入式SQL,然而他只讲了嵌入式sql语句的语法,并没有将如何在编译器上设置,搜了半天才发现这个mysql提供了函数接口代替了那些嵌入式SQL语句,所以又转而去在vs上配置MySQL。
首先声明一下我用的是vs2010和mysql5.5,这个和mysql的图形化工具没关系,只需要编译器和mysql就行了,下面是配置的步骤:
1.创建一个项目:
创建项目:创建一个空项目
初始代码:创建一个源文件(用来测试是否连接成功并),内容如下:
我第一次看也是一脸懵逼,怎么和学的那些嵌入式SQL语句一点也不一样,其实课上也说了这些编译器没法直接编译sql语言,网上说的那些也乱七八糟,下面用到的函数/变量类型都是mysql对高级语言的接口函数,可以让我们在vs中实现对数据库的操作。这里就不具体说了(其实我也不会)。不过在文章最后也总结了一些常用的mysql对高级语言的接口函数,想了解的还可以看看https://blog.csdn.net/qq_41874454/article/details/82717037这篇文章,里面有一些介绍。
此外,注意mysql_real_connect这个用来判断是否连接成功的函数的地址,端口,密码等连接信息一定要和你当初配置mysql时的一致。也就是下面代码中的"localhost", “root”, “你的密码”, “mysql”, 3306,不过大家大多数除了密码应该一样吧。其他内容不用改。
#include<winsock.h>//注意顺序,要放在mysql.h前
#include<iostream>
#include<stdio.h>
#include<mysql.h>
using namespace std;
int main(){
MYSQL conn;
MYSQL_RES *res_set;
MYSQL_ROW row;
//初始化mysql
mysql_init(&conn);
if (!mysql_real_connect(&conn, "localhost", "root", "你的密码", "mysql", 3306, NULL, 0)){
//返回false则连接失败,返回true则连接成功
fprintf(stderr, "Failed to connect to database: Error: %s\n",mysql_error(&conn));
}
else{
fprintf(stderr, "Successfully connected to Database.\n");
int status = mysql_query(&conn, "SELECT * FROM user");
res_set = mysql_store_result(&conn);
int count = mysql_num_rows(res_set);
printf("No of rows = %d\n", count);
while ((row = mysql_fetch_row(res_set)) != NULL){
for (int i = 0; i<mysql_num_fields(res_set); i++){
printf("%s \t", row[i] != NULL ? row[i] : "NULL");
}
printf("\n");
}
}
mysql_close(&conn);
getchar();
return 0;
}
2.环境配置:
和大多数库文件一样,我们要在项目属性中配置。
(1)将mysql 安装目录中的include文件夹目录加入到c/c++>常规>附加包含目录中。
(2)将mysql 安装目录中的lib文件夹目录加入到链接器>常规>附加库目录中
(3)将libmysql.lib加入到链接器》输入》附加依赖项中
(4)尝试运行(注意需要用release方式运行)
若提示以下报错
则将提示缺少的文件从mysql安装目录中复制到本项目目录的release文件夹。
3.测试运行结果:
最后是从别人那里看的一些常用的MySQL的API函数
原文链接:https://blog.csdn.net/weixin_43155866/article/details/88837424
mysql_affected_rows() 返回被最新的UPDATE, DELETE或INSERT查询影响的行数。
mysql_close() 关闭一个服务器连接。
mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。
mysql_change_user() 改变在一个打开的连接上的用户和数据库。
mysql_create_db() 创建一个数据库。该函数不推荐;而使用SQL命令CREATE DATABASE。
mysql_data_seek() 在一个查询结果集合中搜寻一任意行。
mysql_debug() 用给定字符串做一个DBUG_PUSH。
mysql_drop_db() 抛弃一个数据库。该函数不推荐;而使用SQL命令DROP DATABASE。
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() 初始化一个一行一行地结果集合的检索。