使用C语言连接
mysql操作是线程安全的(事务)
以API路线认识mysql API的使用.
库的安装
如果是通过yum等安装方式安装的mysql,则在安装过程mysql开发包一般也安装好了,因此推荐这种方式安装mysql;
安装好后开发头文件目录位于/usr/include/mysql
,库位于/usr/lib64/mysql
如果没有找到,说明可能没有安装,可以手动命令安装:
yum install -y mysql-community-devel ## 开发包
也可以单独下载mysql连接工具,MySQL :: Download MySQL Connector/C++ (Archived Versions);注意,如果能找到对应的版本是最好,不过现在旧版本官网可能不显示了,这个也无妨,mysql对新版本是能做到前后兼容的,因此可以下载推荐的8.x版本.这种方法缺点就是比较繁琐,还可能出现兼容性问题等,因此不是很推荐.
对下载下来的包中,目前最重要的是include文件夹与lib文件夹,有这两个目录就能C/C++连接数据库与开发.(需要动静态库系列知识)
linux generic: 通用版
C API
mysql_init
MySQL :: MySQL 5.7 C API Developer Guide :: 5.4.54 mysql_real_connect()
MYSQL* mysql_init(MYSQL *mysql);
顾名思义,对
MYSQL*
对象进行初始化.
mysql_real_connect
MySQL :: MySQL 5.7 C API Developer Guide :: 5.4.54 mysql_real_connect()
MYSQL *mysql_real_connect(
MYSQL *mysql, // 输出型参数:成功则返回mysql访问句柄,错误返回NULL;
const char *host, // mysqld的ip
const char *user, // 登录的用户名
const char *passwd, // 登录密码
const char *db, // 连接的数据库
unsigned int port, // mysqld端口号
const char *unix_socket, // 域间套接字(类似进程间管道通信)
unsigned long clientflag); // 位图,启用一些特性;一般使用默认就好,即0
注意:
需要先使用mysql_init初始化
MYSQL*
对象.
返回值
如果连接成功,则使用MYSQL*连接处理程序,如果连接不成功,则为NULL。对于成功的连接,返回值与第一个参数的值相同。
mysql_close
MySQL :: MySQL 5.7 C API Developer Guide :: 5.4.5 mysql_close()
void mysql_close(MYSQL *mysql);
关闭
mysql_query
MySQL :: MySQL 5.7 C API Developer Guide :: 5.4.53 mysql_query()
int mysql_query(
MYSQL *mysql,
const char *stmt_str);
注意:
官方文档中描述说到,不用在sql语句后面加上’;’和’G’
返回值:
成功返回0,失败返回错误码
模拟实现一个简单的MySQL客户端:
#include
#include
#include
#include
#include
#include
/*
MYSQL *mysql_real_connect(
MYSQL *mysql, // 输出型参数:成功则返回mysql访问句柄,错误返回NULL
const char *host, // mysqld的ip
const char *user, // 登录的用户名
const char *passwd, // 登录密码
const char *db, // 连接的数据库
unsigned int port, // mysqld端口号
const char *unix_socket, // 域间套接字(类似进程间管道通信)
unsigned long clientflag); // 位图,启用一些特性;一般使用默认就好,即0
*/
const std::string host = "127.0.0.1";
const std::string user = "chj";
const std::string passwd = "123456";
const std::string db = "test_db";
const unsigned int port = 3306;
//const std::string socket = ;
const unsigned long clientflag = 0;
int main(){
std::cout>> ";
if(!std::getline(std::cin,sql)) break;
if(sql == "quit" || sql == "exit") break;
int n = mysql_query(mysql,sql.c_str());
if(n == 0){
std::cout
mysql_set_character_set
MySQL :: MySQL 5.7 C API Developer Guide :: 5.4.69 mysql_set_character_set()
int mysql_set_character_set(
MYSQL *mysql,
const char *csname); //cs == character set
问题: 一般来说,mysqld也是设置成utf8的,C/C++代码也是utf8的,为什么中文可能会出现乱码呢?
解析: 两端都没问题,那问题只能出自于链接,因此需要设置链接字符集
建立好链接之后,获取英文没有问题,如果获取中文是乱码:
设置链接的默认字符集是utf8,原始默认是latin1
mysql_set_character_set(myfd, “utf8”);
mysql_store_result
MySQL :: MySQL 5.7 C API Developer Guide :: 5.4.77 mysql_store_result()
MYSQL_RES *mysql_store_result(MYSQL *mysql);
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容