当前位置: 首页 > news >正文

网页制作与网站开发模板seo优化的主要任务

网页制作与网站开发模板,seo优化的主要任务,网站设计怎么做ppt答辩,企业网站建设开题报告MySQL C API的使用 介绍及使用 MySQL C API(也称为 MySQL Connector/C)是用于与 MySQL 数据库交互的 C 语言 API。它提供了一组函数和结构体,允许你在 C 程序中连接到 MySQL 数据库服务器,并执行查询、插入、更新等数据库操作。…

MySQL C API的使用

介绍及使用

MySQL C API(也称为 MySQL Connector/C)是用于与 MySQL 数据库交互的 C 语言 API。它提供了一组函数和结构体,允许你在 C 程序中连接到 MySQL 数据库服务器,并执行查询、插入、更新等数据库操作。

以下是 MySQL C API 的基本使用步骤:

1. 包含头文件:

在你的 C 代码中包含 MySQL C API 的头文件:

#include <mysql/mysql.h>

2. 初始化和连接:

在程序开始时,需要初始化 MySQL C API 并建立与数据库服务器的连接。以下是一个简单的例子:

// 这个函数初始化MySQL,并返回一个MYSQL指针。这个指针在后续的操作中都会使用到。
MYSQL *conn;
conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");exit(1);
}
//连接到数据库:mysql_real_connect()使用这个函数来连接到数据库。其中参数包括上一步得到的MYSQL指针,以及数据库的主机名、用户名、密码、数据库名等。
if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed\n");mysql_close(conn);exit(1);
}
// 补充了解
// 最后三个参数大部分情况下为0,NULL,0即可,三个参数详细介绍如下
port:这是数据库服务端的端口号,默认是MySQL的默认端口3306。如果提供0,将使用默认端口;
unix_socket:这是Unix系统专用的,如果mysql服务器运行在本地,并使用了Unix socket,这个参数就指定了该socket的路径。对于运行在网络上的服务器,此参数通常为NULL;
client_flag:这是额外标志,通常为0。对于特殊情况,可以设置为一些特定的值,比如CLIENT_COMPRESS(在客户端和服务器间进行压缩)CLIENT_SSL(使用ssl连接)CLIENT_LOCAL_FILES(允许LOAD DATA LOCAL操作)等等。详情请查阅MySQL的官方文档。
为了兼容更多的使用场景,mysql_real_connect函数给出了很多参数,适合应对各种复杂的数据库连接情况。但是在实际使用中,大部分情况下,使用默认参数(port为0,unix_socket为NULL,client_flag为0)就足够了。

在这个例子中,使用 mysql_init 初始化 MySQL 对象,然后使用 mysql_real_connect 建立与 MySQL 服务器的连接。你需要提供主机名、用户名、密码和数据库名。

3. 执行查询:

一旦连接建立,你可以执行 SQL 查询。以下是一个简单的查询示例:

//mysql_query()使用这个函数来执行SQL查询。查询结果可以用后续的函数来获取。
if (mysql_query(conn, "SELECT * FROM your_table")) {fprintf(stderr, "SELECT query failed: %s\n", mysql_error(conn));mysql_close(conn);exit(1);
}
//获取查询结果:mysql_store_result() 或 mysql_use_result()这两个函数可以获取查询结果。mysql_store_result()将所有的查询结果存储在客户端,mysql_use_result()则允许你一个接一个地获取结果行。
MYSQL_RES *result = mysql_store_result(conn);		// 注意,返回值是指针
if (result == NULL) {fprintf(stderr, "mysql_store_result() failed\n");mysql_close(conn);exit(1);
}
//遍历结果集:mysql_fetch_row()这个函数可以获取结果集中的一行。你可以在循环中使用它来遍历所有的结果行。
int num_fields = mysql_num_fields(result);
MYSQL_ROW row;		//typedef char **MYSQL_ROW
while ((row = mysql_fetch_row(result))) {for (int i = 0; i < num_fields; i++) {printf("%s ", row[i] ? row[i] : "NULL");}printf("\n");
}mysql_free_result(result);// 补充了解
typedef struct MYSQL_RES {uint64_t row_count;MYSQL_FIELD *fields;struct MYSQL_DATA *data;MYSQL_ROWS *data_cursor;unsigned long *lengths; /* column lengths of current row */MYSQL *handle;          /* for unbuffered reads */const struct MYSQL_METHODS *methods;MYSQL_ROW row;         /* If unbuffered read */MYSQL_ROW current_row; /* buffer to current row */struct MEM_ROOT *field_alloc;unsigned int field_count, current_field;bool eof; /* Used by mysql_fetch_row *//* mysql_stmt_close() had to cancel this result */bool unbuffered_fetch_cancelled;enum enum_resultset_metadata metadata;void *extension;
} MYSQL_RES;

这个例子执行一个简单的 SELECT 查询,然后使用 mysql_store_result 获取查询结果,并使用 mysql_fetch_row 逐行读取结果集中的数据。

4. 插入、更新和删除:

你可以使用 mysql_query 函数执行插入、更新和删除等修改数据库的操作。以下是一个插入数据的示例:

if (mysql_query(conn, "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")) {fprintf(stderr, "INSERT query failed: %s\n", mysql_error(conn));mysql_close(conn);exit(1);
}

5. 清理结果集:

//清理结果集:mysql_free_result()当你处理完查询结果后,需要调用这个函数来清理结果集。
mysql_free_result(result);
mysql_close(conn);

6.关闭连接

在程序结束时,确保关闭与 MySQL 服务器的连接并释放资源:

mysql_close(conn);

这些是 MySQL C API 的基本用法示例。请注意,为了简洁起见,没有进行错误处理的详细检查。在实际应用中,应该更加详细地处理错误以确保程序的稳定性。

API封装

以下为个人在使用过程中,对API的进一步封装

class DataBase {public:~DataBase() {Close();        // 析构函数自动关闭数据库}// 初始化,可以指定连接的 用户名,密码,数据存储库,host,portvoid Init(string name, string pwd, string database, string host = "localhost", int port = 3306) {mysql_init(&mysql_);// 连接数据库if (mysql_real_connect(&mysql_, host.c_str(), name.c_str(), pwd.c_str(), database.c_str(), port, NULL, 0) == NULL) {cout << mysql_error(&mysql_) << endl;cout << "connect error!" << endl;exit(-1);}// 设置字符集编码,包含了character_set_connection为utf8mb4,因为库以及表采用的是utf8mb4字符集if (!mysql_set_character_set(&mysql_, "utf8mb4")){printf("New client character set: %s\n", mysql_character_set_name(&mysql_));}// 设置character_set_client 客户端字符集为GBK,因为命令行窗口是GBK编码,否则mysql 1366 error// 设置character_set_results 查询结果集为GBK,因为命令行窗口是GBK编码,要对应起来,否乱码if (!Query("set character_set_client = gbk") || !Query("set character_set_results = gbk")) {cout << "set character_set_client or character_set_results gbk error:" << Error() << endl;}}// 执行语句bool Query(const string& query) {// 成功0,失败非0return !mysql_query(&mysql_, query.c_str());}// 释放结果集void FreeResult() {mysql_free_result(res_);}// 返回记录行数int Rows() {return mysql_num_rows(res_);}// 返回字段数量int Cols() {return mysql_num_fields(res_);}// 关闭数据库void Close() {mysql_close(&mysql_);}// 获取查询结果集MYSQL_RES* GetResult() {return res_ = mysql_store_result(&mysql_);}// 获取表字段MYSQL_FIELD* GetFields() {return mysql_fetch_fields(res_);}const char* Error() {return mysql_error(&mysql_);}// 获取一行记录MYSQL_ROW FetchRow() {return row_ = mysql_fetch_row(res_);}// 不区分大小写进行比较字符串,主要用于字段名比较bool InsensistiveStringCompare(const string& str1, const string& str2) {string str1Cpy(str1);string str2Cpy(str2);transform(str1Cpy.begin(), str1Cpy.end(), str1Cpy.begin(), ::tolower);transform(str2Cpy.begin(), str2Cpy.end(), str2Cpy.begin(), ::tolower);return (str1Cpy == str2Cpy);}// 输出结果集,便于调试void Show(const string& query) {if (!Query(query)) {cout << "show test error:" << Error() << endl;exit(-1);}MYSQL_RES* res = GetResult();if (!res) {cout << "GetResult error:" << Error() << endl;exit(-1);}int n = Rows(), m = Cols();cout << "共" << n << "条记录," << m << "个字段" << endl;MYSQL_ROW row;string field;vector<vector<string>> records(n + 1, vector<string>(m));vector<int> max_len(m);     // 记录每列数据的最大长度,便于格式化输出 int len = 0;MYSQL_FIELD* fields = GetFields();for (int i = 0; i < m; ++i) {records[0][i] = fields[i].name;         // 获取字段名max_len[i] = (int)max(fields[i].name_length, fields[i].max_length);     // 获取字段记录最大长度以及字段长度,记录最大值}for (int i = 1; i <= n; ++i) {row = FetchRow();for (int j = 0; j < m; ++j) {if (row[j]) field = row[j];else field = "NULL";records[i][j] = field;len = max(len, sizeof field);}}for (int i = 0; i <= n; ++i) {for (int j = 0; j < m; ++j) {cout << setiosflags(ios::left) << setw(max_len[j] + 2) << records[i][j] << ' ';}cout << endl;}}
private:MYSQL mysql_;           // 数据库句柄MYSQL_RES* res_;        // 查询结果集合MYSQL_ROW row_;         // 记录结构体};

文章转载自:
http://usb.fwrr.cn
http://polyopia.fwrr.cn
http://massify.fwrr.cn
http://bluish.fwrr.cn
http://drupe.fwrr.cn
http://seabird.fwrr.cn
http://complex.fwrr.cn
http://unsufferable.fwrr.cn
http://xylanthrax.fwrr.cn
http://periocular.fwrr.cn
http://gearlever.fwrr.cn
http://flokati.fwrr.cn
http://tilapia.fwrr.cn
http://produce.fwrr.cn
http://nfl.fwrr.cn
http://suitable.fwrr.cn
http://disconcerting.fwrr.cn
http://rein.fwrr.cn
http://township.fwrr.cn
http://kittredge.fwrr.cn
http://appeaser.fwrr.cn
http://unplantable.fwrr.cn
http://gospeller.fwrr.cn
http://berdache.fwrr.cn
http://inobservancy.fwrr.cn
http://pentameter.fwrr.cn
http://corncrib.fwrr.cn
http://gassing.fwrr.cn
http://rotatablely.fwrr.cn
http://nop.fwrr.cn
http://delilah.fwrr.cn
http://phosphonium.fwrr.cn
http://ulcerogenic.fwrr.cn
http://slavery.fwrr.cn
http://minorite.fwrr.cn
http://undisguisedly.fwrr.cn
http://pesah.fwrr.cn
http://chorizon.fwrr.cn
http://maladminister.fwrr.cn
http://dihydrotachysterol.fwrr.cn
http://ducker.fwrr.cn
http://abbreviative.fwrr.cn
http://rhinosalpingitis.fwrr.cn
http://doggerel.fwrr.cn
http://acetometer.fwrr.cn
http://antithesis.fwrr.cn
http://shortcake.fwrr.cn
http://tumescence.fwrr.cn
http://sapphism.fwrr.cn
http://sympetalous.fwrr.cn
http://serpentine.fwrr.cn
http://limacine.fwrr.cn
http://frost.fwrr.cn
http://grewsome.fwrr.cn
http://undertip.fwrr.cn
http://unshirted.fwrr.cn
http://snowslip.fwrr.cn
http://tuatara.fwrr.cn
http://pectoral.fwrr.cn
http://bourg.fwrr.cn
http://bananalander.fwrr.cn
http://sigint.fwrr.cn
http://bigger.fwrr.cn
http://scalawag.fwrr.cn
http://nei.fwrr.cn
http://characteristic.fwrr.cn
http://playtime.fwrr.cn
http://kipper.fwrr.cn
http://brim.fwrr.cn
http://viscosity.fwrr.cn
http://inbound.fwrr.cn
http://degustate.fwrr.cn
http://falshlight.fwrr.cn
http://afond.fwrr.cn
http://haemoglobinometry.fwrr.cn
http://reupholster.fwrr.cn
http://warren.fwrr.cn
http://villagization.fwrr.cn
http://isotonic.fwrr.cn
http://dauphine.fwrr.cn
http://enunciability.fwrr.cn
http://biltong.fwrr.cn
http://enface.fwrr.cn
http://meanings.fwrr.cn
http://spherometer.fwrr.cn
http://knobcone.fwrr.cn
http://gymnogenous.fwrr.cn
http://photorpeater.fwrr.cn
http://iacu.fwrr.cn
http://winterclad.fwrr.cn
http://bankable.fwrr.cn
http://vivisectional.fwrr.cn
http://aconitine.fwrr.cn
http://kaliningrad.fwrr.cn
http://dichroitic.fwrr.cn
http://lowland.fwrr.cn
http://isoteniscope.fwrr.cn
http://hardhearted.fwrr.cn
http://kaapland.fwrr.cn
http://emplace.fwrr.cn
http://www.dt0577.cn/news/113788.html

相关文章:

  • 青岛高端网站开发公司软件注册推广平台
  • 有做外国人的零售网站吗厦门关键词优化报价
  • 做任务刷单的网站是真的吗百度地图下载2022新版安装
  • 做网站推广员如何创建网页链接
  • 网站访问速度跟服务器cpu和内存和带宽哪个重要申请百度账号注册
  • 免费网站制作教程seo关键词排名优化价格
  • 公司请外包做的网站怎么维护网站seo排名优化工具在线
  • 创世做的网站源码企业网络营销推广案例
  • 网站开发有关费用口碑营销案例及分析
  • 个人网站可以做音乐下载网典型的口碑营销案例
  • 做北美市场的外贸网站河北网站seo策划
  • 郴州网站建设软文模板app
  • 京东seo搜索优化seo与sem的关系
  • 北京 外贸网站建设云南网站建设百度
  • 什么是网站建设营销策略理论
  • 南昌建网站的公司排名优化工具
  • 就业网站建设推广业务平台
  • nas云存储做视频网站厦门做网站公司有哪些
  • 洱源网站建设bing搜索
  • 企业官网网站建设网络广告推广
  • 手机做任务的网站百度下载免费安装
  • 建设网站的步骤seo西点培训班一般要多少学费
  • 公司的网站做备案我是网站负责人如果离职以后要不要负法律责任免费的企业黄页网站
  • 怎么做网站站长seo自学网app
  • 涪城移动网站建设google官方下载
  • 专业返利网站开发网盘资源免费观看
  • 正规外贸网站建设公司南宁seo优化
  • 无锡网站建设原则沈阳cms模板建站
  • 日本做暧视频小网站seo关键词首页排名代发
  • 阳光家园广州网站网址今日疫情实时数据