连接

最开始参考了许多百度资料,都不能成功在本地复现对Mysql的连接
后来发现了mysql-connector-c-noinstall-6.0.2-win32.zip,利用压缩包里包含的include、bin和lib文件成功实现C语言对Mysql的操作。
估计原因是32位的IDE无法链接mysql安装时提供的64位的lib..

申明

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <string.h>
#include <mysql.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"libmysql.lib")
  • 据说库的引入顺序对程序实现有影响,没有具体实验过,但是上述顺序是可行的
  • 如果已经在IDE配置好了环境(编译时链入libmysql.lib),那么最后一行的pragma申明可以省略

代码

const char user[] = "root";         //username
const char pswd[] = "123456";         //password
const char host[] = "localhost";    //or"127.0.0.1"
const char database[] = "test";        //要连接的数据库
unsigned int port = 3306;           //server port
MYSQL MySQL_CONNECT;
mysql_init(&MySQL_CONNECT);
if (mysql_real_connect(&MySQL_CONNECT, host, user, pswd, database, port, NULL, 0))
//连接成功
else
//连接失败

操作

mysql_set_character_set()
例子:mysql_set_character_set(&MySQL_CONNECT, "utf8")
用途:为当前连接设置默认字符集。

mysql_query()
例子:mysql_query(&MySQL_CONNECT, "SELECT * FROM test;")
用途:执行各种SQL语句。仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,执行成功时返回 TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。 很有可能一条查询执行成功了但并未影响到或并未返回任何行。

mysql_store_result()
例子:MYSQL_RES *result = mysql_store_result(&MySQL_CONNECT)
用途:对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result() 。对于其他查询,不需要调用mysql_store_result()或mysql_use_result(),但是如果在任何情况下均调用了mysql_store_result(),它也不会导致任何伤害或性能降低。通过检查mysql_store_result()是否返回0,可检测查询是否没有结果集(以后会更多)。

mysql_num_rows()
例子:int rownum = mysql_num_rows(result);
说明:表示取得结果集中行的数目。此命令只对SELECT语句有效。要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows()

mysql_num_fields()
例子:int fdnum = mysql_num_fields(result)
说明:返回结果集中字段的数。

mysql_fetch_field()
例子:MYSQL_FIELD *fd = mysql_fetch_field(result)
用途:返回结果集中代表字段(列)的对象的数组,返回结果集中代表字段(列)的对象的数组,然后输出每个字段名称、表格和最大长度。该对象通常含有如下定义:

  • name:列名
  • orgname:原始的列名(如果指定了别名)
  • table:表名
  • orgtable:原始的表名(如果指定了别名)
  • max_length:字段的最大宽度
  • length:在表定义中规定的字段宽度
  • charsetnr:字段的字符集号
  • flags:字段的位标志
  • type:用于字段的数据类型
  • decimals:整数字段,小数点后的位数

mysql_fetch_row()
例子:

MYSQL_ROW sql_row;
while (sql_row = mysql_fetch_row(result))//获取每行具体的数据
{
    for (i = 0; i < mysql_num_fields(result); i++) printf("%s\t", sql_row[i]);
    printf("\n");
}

用途:检索一个结果集合的下一行。当在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL。当在mysql_use_result()之后使用时,当没有更多的行可检索时或如果出现一个错误,mysql_fetch_row()返回NULL。

mysql_free_result()
例子:if(result != NULL) mysql_free_result(result)
说明:mysql_free_result() 仅需要在考虑到返回很大的结果集时会占用多少内存时调用。在程序结束后所有关联的内存都会被自动释放。

mysql_close()
例子:mysql_close(&MySQL_CONNECT);
说明:关闭非持久的 MySQL 连接。

©著作权归作者所有

发表评论

正在加载 Emoji