用C api 连接mysql数据库的 开发实例
来源:互联网 发布:java前后端分离是什么 编辑:程序博客网 时间:2024/05/21 17:19
1. 下载mysql c connector 安装包; 有两种方法:
1 下载tar文件, 将其中的的 lib, include , bin 都放在 /usr/local 相应的目录下;
2. 也可配置链接库的附加目录 : sudo vi /etc/ld.so.conf 文件中加入你的连接器的lib目录;
3. 好像也可以用 sudo apt-get install libmysqclient-dev
对于c++的好像是 sudo apt-get install libmysql++-dev
2.编辑 C 程序利用mysql c api : 我的程序如下:
- #include<mysql.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- static void output_error(MYSQL * mysql);
- int main(int argc,char* argv[]) {
- MYSQL mysql;
- MYSQL_RES * result;
- MYSQL_ROW row;
- MYSQL_FIELD * fields;
- const char* host ="localhost";
- const char* user ="root";
- const char* password ="root";
- const char* database ="test";
- const int port = 3306;
- const char* socket = NULL;
- const int flag = 0;
- const char* sql ;
- int num_fields;
- unsigned long * lengths;
- int i;
- //initialize the database
- if(!mysql_init(&mysql) ) {
- output_error(&mysql);
- }
- printf("mysql initialized successfully ! /n");
- //connect to the database;
- if(!mysql_real_connect(&mysql, host, user, password, database, port, socket, flag)) {
- output_error(&mysql);
- }
- printf("mysql connect successfully! /n");
- printf("/n/n/nthe content of the table data in the database test/n");
- printf("-----------------------------------------------------------/n");
- //do the select query on the database;
- sql = "select * from data" ;
- //printf("%d : %d/n", sizeof(sql), strlen(sql)); // 4:18 sizeof(sql):the size of point --(4); strlen(sql):
- if( mysql_real_query(&mysql, sql, strlen(sql)) ){
- output_error(&mysql);
- }
- //fetch the the result set of the query!
- result = mysql_store_result(&mysql);
- if(result) {
- fields = mysql_fetch_fields(result); // fetch the struct of result
- num_fields = mysql_num_fields(result); // fetch the number of result fields;
- //lengths = mysql_fetch_lengths(result);
- for(i=0; i<num_fields; i++) {
- printf("%s/t", fields[i].name );
- }
- printf("/n");
- while(row = mysql_fetch_row(result)) {
- for(i=0; i<num_fields; i++) {
- printf("%s /t", row[i]);
- }
- printf("/n");
- }
- //release the result of set for release the memory
- mysql_free_result(result);
- }
- else {
- output_error(&mysql);
- }
- printf("/n/n-----------------------------------------------------------/n");
- //close the connetion to the database
- mysql_close(&mysql);
- return 0;
- }
- static void output_error(MYSQL * mysql) {
- fprintf(stderr, "errorno: %d /n", mysql_errno(mysql) );
- fprintf(stderr, "error info: %s/n", mysql_error(mysql) );
- exit(1);
- }
3. 编译 链接,测试:
- wzb@wzb-desktop:~/test$ gcc -o db_test db_test.c -lmysql
- wzb@wzb-desktop:~/test$ ./db_test
- mysql initialized successfully !
- mysql connect successfully!
- the content of the table data in the database test
- -----------------------------------------------------------
- id nodeId data flag time
- 1 0 0 0 2011-03-31 18:19:40
- 2 1 1 2 2011-03-31 18:29:05
- -----------------------------------------------------------
- wzb@wzb-desktop:~/test$
注意链接动态库的选项 : -lmysql
4.对mysql c开发几个有用的命令:ldd, mysql_config, file ,nm
ldd: 输出对动态库的依赖,即依赖的动态库的信息;
mysql_conf :可以获得对mysql的配置开发的信息: mysql_config -- libs
看一下,这几个命令的输出情况:
- wzb@wzb-desktop:~/test$ ldd db_test
- linux-gate.so.1 => (0x00f40000)
- libmysql.so.16 => /usr/local/lib/libmysql.so.16 (0x0020f000)
- libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x006bf000)
- libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x004e4000)
- libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00110000)
- /lib/ld-linux.so.2 (0x00af6000)
- wzb@wzb-desktop:~/test$ file db_test
- db_test: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs),for GNU/Linux 2.6.15, not stripped
- wzb@wzb-desktop:~/test$ nm db_test
- 08049de4 d _DYNAMIC
- 08049ec0 d _GLOBAL_OFFSET_TABLE_
- 08048c88 R _IO_stdin_used
- w _Jv_RegisterClasses
- 08049dd4 d __CTOR_END__
- 08049dd0 d __CTOR_LIST__
- 08049ddc d __DTOR_END__
- 08049dd8 d __DTOR_LIST__
- 08048dcc r __FRAME_END__
- 08049de0 d __JCR_END__
- 08049de0 d __JCR_LIST__
- 08049f24 A __bss_start
- 08049f18 D __data_start
- 08048c40 t __do_global_ctors_aux
- 08048830 t __do_global_dtors_aux
- 08049f1c D __dso_handle
- w __gmon_start__
- 08048c3a T __i686.get_pc_thunk.bx
- 08049dd0 d __init_array_end
- 08049dd0 d __init_array_start
- 08048bd0 T __libc_csu_fini
- 08048be0 T __libc_csu_init
- U __libc_start_main@@GLIBC_2.0
- U __stack_chk_fail@@GLIBC_2.4
- 08049f24 A _edata
- 08049f2c A _end
- 08048c68 T _fini
- 08048c84 R _fp_hw
- 08048684 T _init
- 08048800 T _start
- 08049f28 b completed.5790
- 08049f18 W data_start
- U exit@@GLIBC_2.0
- U fprintf@@GLIBC_2.0
- 08048860 t frame_dummy
- 08048884 T main
- U mysql_close
- U mysql_errno
- U mysql_error
- U mysql_fetch_fields
- U mysql_fetch_row
- U mysql_free_result
- U mysql_init
- U mysql_num_fields
- U mysql_real_connect
- U mysql_real_query
- U mysql_store_result
- 08048b66 t output_error
- 08049f20 d p.5788
- U printf@@GLIBC_2.0
- U putchar@@GLIBC_2.0
- U puts@@GLIBC_2.0
- 08049f24 B stderr@@GLIBC_2.0
- wzb@wzb-desktop:~/test$
- wzb@wzb-desktop:~/test$ mysql_config
- Copyright 2009 Sun Microsystems, Inc.
- This software comes with ABSOLUTELY NO WARRANTY. This is free software,
- and you are welcome to modify and redistribute it under the GPL license
- Get compiler flags for using the MySQL client library.
- Usage: mysql_config [OPTIONS]
- --cflags [-I/usr/local/include]
- -?, --help Display this help and exit.
- --include [-I/usr/local/include]
- --libs [-L/usr/local/lib -lmysql -lpthread]
- --libs_r [-L/usr/local/lib -lmysql -lpthread]
- --version [6.0.2]
- wzb@wzb-desktop:~/test$ mysql_config --libs
- -L/usr/local/lib -lmysql -lpthread
- wzb@wzb-desktop:~/test$ mysql_config --libs_r
- -L/usr/local/lib -lmysql -lpthread
- wzb@wzb-desktop:~/test$ mysql_config --include
- -I/usr/local/include
- wzb@wzb-desktop:~/test$
下文的链接:http://www.cyberciti.biz/tips/linux-unix-connect-mysql-c-api-program.html
Howto: Connect MySQL server using C program API under Linux or UNIX
From my mailbag:
How do I write a C program to connect MySQL database server?
MySQL database does support C program API just like PHP or perl.
The C API code is distributed with MySQL. It is included in the mysqlclient library and allows C programs to access a database.
Many of the clients in the MySQL source distribution are written in C. If you are looking for examples that demonstrate how to use the C API, take a look at these clients. You can find these in the clients directory in the MySQL source distribution.
Requirements
Make sure you have development environment installed such as gcc, mysql development package etc. Following is the list summarize the list of packages to compile program:
- mysql: MySQL client programs and shared library
- mysqlclient: Backlevel MySQL shared libraries (old libs)
- mysql-devel: Files for development of MySQL applications (a must have)
- mysql-server: Mysql server itself
- gcc, make and other development libs: GNU C compiler
Sample C Program
Following instructions should work on any Linux distro or UNIX computer. Here is the small program that connects to mysql server and list tables from mysql database.(download link):
- * Simple C program that connects to MySQL Database server*/
- #include <mysql.h>
- #include <stdio.h>
- main() {
- MYSQL *conn;
- MYSQL_RES *res;
- MYSQL_ROW row;
- char *server = "localhost";
- char *user = "root";
- char *password = "PASSWORD";/* set me first */
- char *database = "mysql";
- conn = mysql_init(NULL);
- /* Connect to database */
- if (!mysql_real_connect(conn, server,
- user, password, database, 0, NULL, 0)) {
- fprintf(stderr, "%s/n", mysql_error(conn));
- exit(1);
- }
- /* send SQL query */
- if (mysql_query(conn, "show tables")) {
- fprintf(stderr, "%s/n", mysql_error(conn));
- exit(1);
- }
- res = mysql_use_result(conn);
- /* output table name */
- printf("MySQL Tables in mysql database:/n");
- while ((row = mysql_fetch_row(res)) != NULL)
- printf("%s /n", row[0]);
- /* close connection */
- mysql_free_result(res);
- mysql_close(conn);
- }
How do I compile and link program against MySQL libs?
MySQL comes with a special script called mysql_config. It provides you with useful information for compiling your MySQL client and connecting it to MySQL database server. You need to use following two options.
Pass --libs option - Libraries and options required to link with the MySQL client library.
$ mysql_config --libs
Output:
-L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib64 -lssl -lcrypto
Pass --cflags option - Compiler flags to find include files and critical compiler flags and defines used when compiling the libmysqlclient library.$ mysql_config --cflags
Output:
-I/usr/include/mysql -g -pipe -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing
You need to pass above option to GNU C compiler i.e. gcc. So to compile above program, enter:$ gcc -o output-file $(mysql_config --cflags)mysql-c-api.c $(mysql_config --libs)
Now execute program:$ ./output-file
Output:
MySQL Tables in mysql database:columns_privdbfunchelp_categoryhelp_keywordhelp_relationhelp_topichosttables_privtime_zonetime_zone_leap_secondtime_zone_nametime_zone_transitiontime_zone_transition_typeuser
References:
- MySQL C API - A must read - official MySQL C API documentation
- 用C api 连接mysql数据库的 开发实例
- 用C api 连接mysql数据库的 开发实例
- ubuntu mysql c api的使用开发实例程序。
- Linux下用C语言API连接MySQL数据库
- Linux下用C语言API连接MySQL数据库
- Linux下用C语言API连接MySQL数据库
- cygwin下用mysql c api连接数据库详解
- C++使用C API 连接MYSQL数据库
- C API 通过ODBC 连接数据库MYSQL
- C API 通过ODBC 连接数据库MYSQL
- 用C API实现MySQL数据库的连接和增删改查
- C语言连接MySQL数据库实例
- C语言连接MySQL数据库实例
- 【数据库开发】 C连接mysql——常用的函数
- C++利用MySQL API连接和操作数据库实例详解
- C/C++通过MySQL的API连接数据库并对数据库中内容RSA解密
- C API连接MYSQL
- Linux下C语言API连接MySQL数据库编译选项
- 整数数组,长度为n,分为m份。求m最大值
- Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)
- hadoop http address绑定内网地址
- 不能跳过的《程序员的职业素养(The Clean Coder)》中的一个章节
- 方法 REG_EXTRACT
- 用C api 连接mysql数据库的 开发实例
- Hi3511的G726音频如何解?
- 为什么《七周七语言》选中的是这几种语言?
- 从文件中查找出现次数最多的10个单词
- 抓拍机基线接口及C程序
- 用PhoneGap Plugin实现html与Objc的交互
- ndk 下 openGL 画图
- 为什么《30天自制操作系统》封面中的猫是两只尾巴
- 第三章、C++数据类型