<p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0810%2F2aad36eej00si0ed000jg00axp.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p id="2U7UARD6">c语言操作Mysql数据库,主要就是为了实现对数据库的增、删、改、查等操作,操作之前,得先连接数据库啊,而连接数据库主要有两种方法。一、使用mysql本身提供的API,在mysql的安装目录中可可以看到大量的头文件、lib文件、dll文件,这说明mysql原生就支持了c语言,操作起来相当简单。二、使用win32 api(这里只探讨windows平台),主要是ODBC。</p><p id="2U7UARD7">ODBC API 接口是(Open Database Connectivity)开放式数据库接口,它建立了一组规范,并提供了一组对数据库访问的标准API,这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。这个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。</p><p id="2U7UARD8">这里先从第一种方法开始,先认识基本的几个api函数。</p><p id="2U7UARD9"><strong>1</strong>MYSQL *mysql_init(MYSQL *mysql)</p><p id="2U7UARDA">功能: 分配或初始化MYSQL对象。</p><p id="2U7UARDB">参数:mysql</p><p id="2U7UARDC">待初始化的MYSQ对象,将对象地址传入,NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。</p><p id="2U7UARDD">用法实例:</p><p id="2U7UARDE">MYSQL mysql;</p><p id="2U7UARDF">mysql_init(&mysql); // 或者 mysql = mysql_init(NULL);</p><p id="2U7UARDG"><strong>2</strong>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)</p><p id="2U7UARDH">功能:尝试与运行在主机上的MySQL数据库引擎建立连接,这个函数参数很多啊。看名字就可以是什么意思了</p><p id="2U7UARDI">参数:mysql 前面一个函数的返回的mysql实例句柄。host 要连接的数据库的主机,可以是ip地址或主机名。user 表示登录数据库的用户名</p><p id="2U7UARDJ">passwd 登录的密码。db 就是访问的数据库。port mysql的tcp/ip端口默认是3306.unix_socket 表示连接类型。client_flag 暂时为0即可。</p><p id="2U7UARDK"><strong>3</strong>int mysql_query(MYSQL *mysql,const char *query)</p><p id="2U7UARDL">功能:根据query查询语句执行查询数据库</p><p id="2U7UARDM">参数: mysql mysql的实例。query 查询语句字符串</p><p id="2U7UARDN">返回值: 成功返回0,失败返回非0</p><p id="2U7UARDO"><strong>4</strong>MYSQL_RES *mysql_store_result(MYSQL *mysql)</p><p id="2U7UARDP">功能:得到查询的结果集,对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result()</p><p id="2U7UARDQ">参数:mysql前面的mysql实例</p><p id="2U7UARDR">返回值:成功返回MYSQL_RES结构体,该结构体中保存查询的结果</p><p id="2U7UARDS"><strong>5</strong>MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)</p><p id="2U7UARDT">功能:mysql_store_result得到的结果结构中提取一行,并把它放到一个行结构中。</p><p id="2U7UARDU">返回值:下一行的一个MYSQL_ROW结构当数据用完或发生错误时返回null</p><p id="2U7UARE1">下面是简单实例代码</p><p id="2U7UARE2">#include</p><p id="2U7UARE3">#include</p><p id="2U7UARE4">#include</p><p id="2U7UARE5">#include "C:Program FilesMySQLMySQL Server 5.7includemysql.h" //包含MySQL所需要的头文件</p><p id="2U7UARE6">#pragma comment(lib, "libmysql.lib")</p><p id="2U7UARE7">int main(void)</p><p id="2U7UARE9">MYSQL mysql, *sock; //声明MySQL的句柄</p><p id="2U7UAREA">const char * host = "127.0.0.1"; //因为是作为本机测试,所以填写的是本地IP</p><p id="2U7UAREB">const char * user = "root"; //这里改为你的用户名,即连接MySQL的用户名</p><p id="2U7UAREC">const char * passwd = "root"; //这里改为你的用户密码</p><p id="2U7UARED">const char * db = "test"; //这里改为你要连接的数据库的名字,一个数据可能有几张表</p><p id="2U7UAREE">unsigned int port = 3306; //这是MySQL的服务器的端口,如果你没有修改过的话就是3306。</p><p id="2U7UAREF">const char * unix_socket = NULL; //unix_socket这是unix下的,我在Windows下,所以就把它设置为NULL</p><p id="2U7UAREG">unsigned long client_flag = 0; //这个参数一般为0</p><p id="2U7UAREH">const char * i_query = "select * from person"; //查询语句,从那个表中查询,这里后面没有;</p><p id="2U7UAREI">MYSQL_RES * result; //保存结果集的</p><p id="2U7UAREJ">MYSQL_ROW row; //代表的是结果集中的一行</p><p id="2U7UAREK">//my_ulonglong row;</p><p id="2U7UAREL">mysql_init(&mysql); //连接之前必须使用这个函数来初始化</p><p id="2U7UAREM">if ( (sock = mysql_real_connect(&mysql, host, user, passwd, db, port, unix_socket, client_flag) ) == NULL ) //连接MySQL</p><p id="2U7UAREO">printf("fail to connect mysql
讯享网
”);
fprintf(stderr, “ %s “, mysql_error(&mysql));
exit(1);
else
fprintf(stderr, “connect ok!! “);
if ( mysql_query(&mysql, i_query) != 0 ) //如果连接成功,则开始查询 .成功返回0
fprintf(stderr, “fail to query! “);
exit(1);
else
if ( (result = mysql_store_result(&mysql)) == NULL ) //保存查询的结果
fprintf(stderr, “fail to store result! “);
exit(1);
else
while ( (row = mysql_fetch_row(result)) != NULL ) //读取结果集中的数据,返回的是下一行。因为保存结果集时,当前的游标在第一行【之前】
printf(“name is %s “, row[0]); //打印当前行的第一列的数据
printf(“age is %s “, row[1]); //打印当前行的第二列的数据
//row = mysql_num_row(result);
//printf(”%lu “, mysql_num_row(result));
mysql_free_result(result); //释放结果集
mysql_close(sock); //关闭连接
system(“pause”);
exit(EXIT_SUCCESS);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/185866.html