C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查_MySQL
一、开发环境
ReadHat6.332位、mysql5.6.15、gcc4.4.6
二、编译
gcc-I/usr/include/mysql-L/usr/lib-lmysqlclient main.c -o main.out
-I:指定mysql头文件所在目录(默认去/usr/include目录下寻找所用到的头文件)
-L:指定mysql动态库文件所在目录(默认从/usr/lib目录查找)
-l:链接libmysqlclient.so动态库
-o:生成的可执行文件名
三、完整示例
////main.c//mysql数据库编程////Created by YangXin on 14-5-22.//Copyright (c) 2014年 yangxin. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <string.h>#include <mysql.h>MYSQL mysql;// 查询int query();// 修改int update();// 添加数据my_ulonglong add();// 参数化添加数据my_ulonglong addByParams();// 删除数据my_ulonglong delete();// 打印数据库服务器信息void printMySqlInfo();int main(int argc, const char * argv[]){ /*连接之前,先用mysql_init初始化MYSQL连接句柄*/ mysql_init(&mysql); /*使用mysql_real_connect连接服务器,其参数依次为MYSQL句柄,服务器IP地址, 登录mysql的用户名,密码,要连接的数据库等*/ if(!mysql_real_connect(&mysql, "localhost", "root", "yangxin", "test", 0, NULL, 0)) { printf("connecting to Mysql error:%d from %s/n",mysql_errno(&mysql), mysql_error(&mysql)); return -1; }else { printf("Connected Mysql successful!/n"); } printMySqlInfo(); // 设置编码 mysql_query(&mysql, "set names utf8"); // 参数化添加数据 addByParams(); // 查询 query(); // 修改 update(); // 添加 add(); // 删除 delete(); /*关闭连接*/ mysql_close(&mysql); return 0;}// 查询int query(){ int flag, i; const char *sql = NULL; MYSQL_RES *res = NULL; MYSQL_ROW row = NULL; MYSQL_FIELD *fields = NULL; sql = "select * from t_user" ; flag = mysql_real_query(&mysql, sql, (unsigned int)strlen(sql)); if (flag) { printf("query error:%d from %s/n",mysql_errno(&mysql),mysql_error(&mysql)); return -1; } // 将查询结果读取到内存当中,如果数据很多的情况会比较耗内存 res = mysql_store_result(&mysql); // res = mysql_use_result(&mysql); // 需要用到的时候,每次从服务器中读取一行 // 字段数量 unsigned int field_count = mysql_field_count(&mysql); printf("field_cout:%d/n",field_count); // 查询总数 my_ulonglong rows = mysql_num_rows(res); printf("%lld/n",rows); // 获取所有字段 fields = mysql_fetch_fields(res); for (int i = 0; i < mysql_num_fields(res); i++) { printf("%s/t", fields[i].name); } printf("/n"); // 遍历结果集 while((row = mysql_fetch_row(res))) { for (i = 0; i < mysql_num_fields(res); i++) { printf("%s/t",row[i]); } printf("/n"); } // 释放结果集 mysql_free_result(res); return 0;}// 修改int update(){ const char *sql = NULL; int flag = -1; sql = "update t_user set name='lisi',age=20 where id=1"; // 执行SQL指令 flag = mysql_real_query(&mysql, sql, (unsigned int)strlen(sql)); if (flag) { printf("update data error:%d from %s/n",mysql_errno(&mysql),mysql_error(&mysql)); return-1; } printf("update success./n"); return 0;}// 添加my_ulonglong add(){ const char *sql = NULL; int flag = -1; sql = "insert into t_user(name,age,address) values ('zhangsan',40,'beijing')"; // 执行 flag = mysql_real_query(&mysql, sql, strlen(sql)); if (flag) { printf("add data error:%d from %s/n",mysql_errno(&mysql),mysql_error(&mysql)); return -1; } // 删除的行数 my_ulonglong affected_rows = mysql_affected_rows(&mysql); // 新添加记录的ID my_ulonglong newid = mysql_insert_id(&mysql); printf("success add %lld record data, newid:%lld!/n",affected_rows,newid); return newid;}// 参数化添加my_ulonglong addByParams(){ const char *sql = NULL; MYSQL_STMT *stmt = NULL; MYSQL_BIND bnd[3];// 占位符参数数量 memset(&bnd, 0, sizeof(bnd)); // 设置手动提交事务 //mysql_autocommit(&mysql, 0); // 通过参数占位符的方式执行SQL sql = "insert into t_user(name,age,address) values (?,?,?)"; stmt = mysql_stmt_init(&mysql); // 预处理SQL if(mysql_stmt_prepare(stmt, sql, (unsigned int)strlen(sql))) { fprintf(stderr, "mysql_stmt_prepare faild:%d from %s/n", mysql_stmt_errno(stmt),mysql_stmt_error(stmt)); return -1; } // 封装占位符数据 const char *name = "hanzhiqiang"; bnd[0].buffer = (void *)name; bnd[0].buffer_type = MYSQL_TYPE_STRING; bnd[0].buffer_length = strlen(name); int age = 30; bnd[1].buffer = (void *)&age; bnd[1].buffer_length = sizeof(int); bnd[1].buffer_type = MYSQL_TYPE_LONG; const char *addres = "heimuer"; bnd[2].buffer = (void *)addres; bnd[2].buffer_length = strlen(addres); bnd[2].buffer_type = MYSQL_TYPE_STRING; // 绑定占位符参数值 if(mysql_stmt_bind_param(stmt, bnd)) { fprintf(stderr, "mysql_stmt_bind_param faild:%d from %s/n",mysql_errno(&mysql), mysql_error(&mysql)); return -2; } // 执行SQL if (mysql_stmt_execute(stmt)) { fprintf(stderr, "mysql_stmt_execute faild:%d from %s/n", mysql_errno(&mysql), mysql_error(&mysql)); return -3; } // 关闭statement mysql_stmt_close(stmt); // 提交事务 //mysql_commit(&mysql); // 事务回滚(在提交事务前)执行 // mysql_rollback(&mysql); // 获取插入数据后,数据库受影响的记录数 my_ulonglong newid = mysql_stmt_insert_id(stmt); printf("参数化语句插入新记录的id: %lld/n",newid); // 受影响的行数 my_ulonglong affectedrows = mysql_stmt_affected_rows(stmt); printf("参数化语句插入受影响的行数:%lld/n",affectedrows); return newid;}my_ulonglong delete(){ const char *sql = NULL; int flag = -1; sql = "delete from t_user where id > 10"; flag = mysql_real_query(&mysql, sql, strlen(sql)); if (flag) { printf("delete data error:%d from %s/n",mysql_errno(&mysql), mysql_error(&mysql)); return -1; } my_ulonglong affected_rows = mysql_affected_rows(&mysql); printf("删除的行数:%lld/n",affected_rows); printf("success delete %lld record data !/n",affected_rows); return affected_rows;}void printMySqlInfo(){ const char *stat = mysql_stat(&mysql); const char *server_info = mysql_get_server_info(&mysql); const char *clientInfo = mysql_get_client_info(); unsigned long version = mysql_get_client_version(); const char *hostinfo = mysql_get_host_info(&mysql); unsigned long serverversion = mysql_get_server_version(&mysql); unsigned int protoinfo = mysql_get_proto_info(&mysql); printf("stat:%s/n",stat); printf("server_info:%s/n",server_info); printf("clientInfo:%s/n",clientInfo); printf("version:%ld/n",version); printf("hostinfo:%s/n",hostinfo); printf("serverversion:%ld/n",serverversion); printf("protoinfo:%d/n",protoinfo); const char *charactername = mysql_character_set_name(&mysql); printf("client character set:%s/n",charactername); if (!mysql_set_character_set(&mysql, "utf8")) { printf("New client character set: %s/n", mysql_character_set_name(&mysql)); }}

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL和MariaDB的主要区别在于性能、功能和许可证:1.MySQL由Oracle开发,MariaDB是其分支。2.MariaDB在高负载环境中性能可能更好。3.MariaDB提供了更多的存储引擎和功能。4.MySQL采用双重许可证,MariaDB完全开源。选择时应考虑现有基础设施、性能需求、功能需求和许可证成本。

MySQL和phpMyAdmin可以通过以下步骤进行有效管理:1.创建和删除数据库:在phpMyAdmin中点击几下即可完成。2.管理表:可以创建表、修改结构、添加索引。3.数据操作:支持插入、更新、删除数据和执行SQL查询。4.导入导出数据:支持SQL、CSV、XML等格式。5.优化和监控:使用OPTIMIZETABLE命令优化表,并利用查询分析器和监控工具解决性能问题。

SQL是一种用于管理关系数据库的标准语言,而MySQL是一个使用SQL的数据库管理系统。SQL定义了与数据库交互的方式,包括CRUD操作,而MySQL实现了SQL标准并提供了额外的功能,如存储过程和触发器。

DMA在C 中是指DirectMemoryAccess,直接内存访问技术,允许硬件设备直接与内存进行数据传输,不需要CPU干预。1)DMA操作高度依赖于硬件设备和驱动程序,实现方式因系统而异。2)直接访问内存可能带来安全风险,需确保代码的正确性和安全性。3)DMA可提高性能,但使用不当可能导致系统性能下降。通过实践和学习,可以掌握DMA的使用技巧,在高速数据传输和实时信号处理等场景中发挥其最大效能。

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,删除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段时,需指定位置以优化查询性能和数据结构;删除字段前需确认操作不可逆;使用在线DDL、备份数据、测试环境和低负载时间段修改表结构是性能优化和最佳实践。

Macosandlinuxbothofferuniquerenths:Macosprovidesa-frignlylexperienceWithExcelenthardArdWareIntegration,而Lilinuxexcelsinflexibilitionallibility andCommunitysupport.macos,evartednebyBybyBybyBybyByapple,issone bybyapple,seknoybyapple

在C 中处理高DPI显示可以通过以下步骤实现:1)理解DPI和缩放,使用操作系统API获取DPI信息并调整图形输出;2)处理跨平台兼容性,使用如SDL或Qt的跨平台图形库;3)进行性能优化,通过缓存、硬件加速和动态调整细节级别来提升性能;4)解决常见问题,如模糊文本和界面元素过小,通过正确应用DPI缩放来解决。
