MySQL和语言的连接
1.下载开发包
���了之前的基础,就可以使用语言来使用数据库了,实际上原生命令行操作数据库的场景比较少,语言级别的库和包才更加常用,接下我来带您学习如何使用 C/C++ 访问 MySQL 客户端。
然后创建一个可以远程登录的用户,并且拥有对一个 coon 数据库的所有权限。
然后去 官网 安装对应的库。
我们这里只演示 C 语言的调用。
但是这个方法比较麻烦,并且易错,因此这里只是简单讲一下流程,我还是推荐您直接使用 yum 来安装。
但是其实我们之前就安装过了,在使用 yum install -y mysql -community-server 时候,就已经安装过了。
可以使用 ls /usr/include/mysql 查看内部有关 MySQL 的头文件。
若没有找到就使用 yum install -y mysql-devel 下载对应的开发工具。
# 查看对应的头文件 # ls /usr/include/mysql big_endian.h my_getopt.h my_xml.h binary_log_types.h my_global.h plugin_audit.h byte_order_generic.h my_list.h plugin_ftparser.h byte_order_generic_x86.h mysql plugin_group_replication.h decimal.h mysql_com.h plugin.h errmsg.h mysql_com_server.h plugin_keyring.h keycache.h mysqld_ername.h plugin_validate_password.h little_endian.h mysqld_error.h sql_common.h m_ctype.h mysql_embed.h sql_state.h m_string.h mysql.h sslopt-case.h my_alloc.h mysql_time.h sslopt-longopts.h my_byteorder.h mysql_version.h sslopt-vars.h my_command.h mysqlx_ername.h thr_cond.h my_compiler.h mysqlx_error.h thr_mutex.h my_config.h mysqlx_version.h thr_rwlock.h my_config_x86_64.h my_sys.h typelib.h my_dbug.h my_thread.h my_dir.h my_thread_local.h # ls /lib64/mysql libmysqlclient.a libmysqlclient.so.20 libmysqlservices.a plugin libmysqlclient.so libmysqlclient.so.20.3.31 mecab
尝试在 C 中使用 MySQL 的接口。
//main.cc 内部 #include #include int main() { printf("mysql client Version: %s\n", mysql_get_client_info()); //获取客户端版本信息 return 0; }
然后使用 g++ main.cc -L/lib64/mysql -lmysqlclient,在我这边回显的结果为 mysql client Version: 5.7.
2.使用 API
补充:接口地址。
接下来我们直接通过一个程序来学习接口的使用。
首先先创建一个表,并且设置对应用户的权限,开发云服务器的端口号。
# 创建表结构 mysql> create table test_table( id bigint primary key auto_increment, name va rchar(32) not null, age int not null, telphone varchar(32) unique ); Query OK, 0 rows affected (0.06 sec) mysql> desc test_table; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | name | varchar(32) | NO | | NULL | | | age | int(11) | NO | | NULL | | | telphone | varchar(32) | YES | UNI | NULL | | +----------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
然后编写代码如下:
//main.cc 内部 #include #include #include #include const std::string host = "127.0.0.1"; //也可以使用 localhost const std::string user = "jimou"; const std::string passwd = "**********"; //这里我隐去了我的密码 const std::string db = "conn"; const unsigned int port = 8080; int main() { //1.获取客户端版本信息 std::cout std::cerr std::cerr std::string sql; std::cout break; } if (sql == "quit" || sql == "exit") { std::cout std::cerr MYSQL_RES* res = mysql_store_result(mySql); //MYSQL_RES 是一个类型,指向的对象可以保存查询的数据,把数据全部当作字符串存储起来,可以看作一个 char** arr[],每个元素都是一个 char* arr[],实际上这些空间也是 new/malloc() 出来的,因此最后一定要记得释放 if (res == nullptr) { std::cerr //读取行数和列数 my_ulonglong rows = mysql_num_rows(res); my_ulonglong fields = mysql_num_fields(res); std::cout std::cout MYSQL_ROW row = mysql_fetch_row(res); //该函数行为类似 C++ 的迭代器,每次遍历自动移动行 for (int j = 0; j
The End