日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql —— linux下使用c语言访问mySql数据库

發布時間:2025/10/17 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql —— linux下使用c语言访问mySql数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
示例1:#include<stdio.h>#include<mysql.h>int?main(){MYSQL?mysql;mysql_init(&mysql);if(!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0)){fprintf(stderr,"Failedtoconnecttodatabase:Error:%s\n",mysql_error(&mysql));}mysql_close(&mysql);return?0;}示例2(linux下使用c語言訪問mySql數據庫):
1、聯接數據庫 (test需要提前創建好)2、創建新的數據庫(workdata)3、創建user表 4、向表中插入信息 作為管理員的信息5、使用sql語句查詢表中的信息
/********************************************* 編譯命令:gcc aa.c -lmysqlclient -o aa* 執行命令:./aa* ******************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "mysql/mysql.h"MYSQL *g_conn;//mysql 鏈接 MYSQL_RES *g_res;//mysql 記錄集 MYSQL_ROW g_row;//字符串數組,mysql 記錄行const char *g_host_name = "localhost"; const char *g_user_name = "root"; const char *g_password = "asdfgh"; const char *g_db_name = "test"; const unsigned int g_db_port = 3306;#define MAX_BUF_SIZE 1024 //緩沖區最大字節數 char sql[MAX_BUF_SIZE]; char Time[MAX_BUF_SIZE];int iNum_rows = 0;//mysql語句執行結果返回行數賦初值 int flag = 0;//管理員權限開關 int i = 1;//系統運行開關 /***************************************************** time : 20180622* addby : swj* function :print_mysql_error() 打印錯誤信息* ******************************************************/ void print_mysql_error(const char *msg) {if(msg)printf("%s: %s\n",msg,mysql_error(g_conn));elseputs(mysql_error(g_conn)); } /***************************************************** time : 20180622* addby : swj* function :executesql() 執行sql語句,成功返回0,失敗返回-1 ******************************************************/ int executesql(const char * sql) {if(mysql_real_query(g_conn,sql,strlen(sql)))return -1;return 0; } /***************************************************** time : 20180622* addby : swj* function :init_mysql() 初始化鏈接******************************************************/ int init_mysql() {//init the database connection g_conn = mysql_init(NULL);//connection the database if(!mysql_real_connect(g_conn,g_host_name,g_user_name,g_password,g_db_name,g_db_port,NULL,0))return -1;//鏈接失敗if(executesql("set names utf8"))return -1;return 0; //返回成功 } /***************************************************** * time : 20180622* * addby : swj* * function :create_database() 選擇數據庫 沒有的時候 創建數據;有的時候 進去數據* 庫 * ******************************************************/ void create_database() {sprintf(sql,"use workdata");if(executesql(sql) == -1){puts("create database");executesql("create database workdata;");print_mysql_error(NULL);puts("choice database");executesql("use workdata;");print_mysql_error(NULL);puts("!!!Initialize the success!!!");}else{executesql("use workdata;");print_mysql_error(NULL);}} /***************************************************** * time : 20180622* * addby : swj* * function :create_table() 創建表 * ******************************************************/ void create_table() {sprintf(sql,"show tables;");executesql(sql);g_res = mysql_store_result(g_conn);iNum_rows = mysql_num_rows(g_res);if(iNum_rows == 0){puts("create users table");executesql("create table users(id_ int(11) unsigned primary key auto_increment,name_ char(255) not null unique,password_ char(32) not null,create_time_ datetime,creator_id_ int(11) unsigned,auth_type_ int(11) not null,dyn_sn_ char(10),dyn_pass_sn_ text,remark_ varchar(200),foreign key(creator_id_) references users(id_));");}mysql_free_result(g_res);//釋放結果集 } /***************************************************** * time : 20180622* * addby : swj* * function :init_administrator() 初始化管理員賬戶* * 管理員用戶名:root 密碼:root* * ******************************************************/ void init_administrator() {sprintf(sql,"select * from users where id_='1' and name_='root';");executesql(sql);g_res = mysql_store_result(g_conn);iNum_rows = mysql_num_rows(g_res);if(iNum_rows == 0){puts("Init Administrtor User");sprintf(sql,"insert into users values(1,'root','root','2017-08-18 12:21:11',1,0,'','','0:VIP 1:local pwd 2:local cert');");executesql(sql);}mysql_free_result(g_res);//釋放結果集 } int main(void) {puts("!!!The system is initializing!!!");/*初始化鏈接*///在初始化的時候 數據庫 test 是必須事先創建好的 否則會報錯Unknown database 'test' if(init_mysql())print_mysql_error(NULL);//當鏈接數據庫時候 有錯誤 會報錯//選擇數據庫workdata 沒有的時候 創建數據庫 有的時候 進去數據庫create_database(); //創建表create_table();//初始化管理員賬戶init_administrator(); //操作數據庫 查詢數據庫 表中的信息if(executesql("select * from users"))print_mysql_error(NULL);g_res = mysql_store_result(g_conn); // 從服務器傳送結果集至本地,mysql_use_result直接使用服務器上的記錄集 int iNum_rows = mysql_num_rows(g_res); // 得到記錄的行數 int iNum_fields = mysql_num_fields(g_res); // 得到記錄的列數 printf("共%d個記錄,每個記錄%d字段\n", iNum_rows, iNum_fields);printf("id_ | name_ |password_| create_time_ |creator_id_ | auth_type_ |dyn_sn_| dyn_pass_sn_ |remark_ \n");while ((g_row=mysql_fetch_row(g_res))) // 打印結果集printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",g_row[0],g_row[1],g_row[2],g_row[3],g_row[4],g_row[5],g_row[6],g_row[7],g_row[8]); // 第一,第二字段mysql_free_result(g_res); // 釋放結果集mysql_close(g_conn);return EXIT_SUCCESS; }
執行結果顯示
當直接編譯.c文件的時候:會出現/tmp/ccp5dIsd.o:在函數‘print_mysql_error’中:aa.c:(.text+0x1e):對‘mysql_error’未定義的引用aa.c:(.text+0x48):對‘mysql_error’未定義的引用/tmp/ccp5dIsd.o:在函數‘executesql’中:aa.c:(.text+0x83):對‘mysql_real_query’未定義的引用………………錯誤是因為沒有進行編譯gcc aa.c -lmysqlclient -o aa
當test數據庫沒有事先創建好(Unknown database 'test'):當test數據庫事先創建好:https://baike.baidu.com/item/mysql_real_connect/4007597?fr=aladdinmysql_real_connect中文名數據庫聯接參數外文名mysql_real_connect頭文件#include<mysql.h>函數說明運行MySQL數據庫引擎建立連接




函數原型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)
第1個參數應是已有MYSQL結構的地址。調用mysql_real_connect()之前,必須調用mysql_init()來初始化MYSQL結構。通過mysql_options()調用,可更改多種連接選項。
“host”的值必須是主機名或IP地址。如果“host”是NULL或字符串"localhost",連接將被視為與本地主機的連接。如果操作系統支持套接字(Unix)或命名管道(Windows),將使用它們而不是TCP/IP連接到服務器。(host參數決定了聯接的類型)
“user”參數包含用戶的MySQL登錄ID。如果“user”是NULL或空字符串"",用戶將被視為當前用戶。在UNIX環境下,它是當前的登錄名。在Windows ODBC下,必須明確指定當前用戶名。
“passwd”參數包含用戶的密碼。如果“passwd”是NULL,僅會對該用戶的(擁有1個空密碼字段的)用戶表中的條目進行匹配檢查。這樣,數據庫管理員就能按特定的方式設置MySQL權限系統,根據用戶是否擁有指定的密碼,用戶將獲得不同的權限。
“db”是數據庫名稱。如果db為NULL,連接會將默認的數據庫設為該值。
如果“port”不是0,其值將用作TCP/IP連接的端口號。注意,“host”參數決定了連接的類型。如果unix_socket不是NULL,該字符串描述了應使用的套接字命名管道。注意,“host”參數決定了連接的類型。
client_flag的值通常為0,但是,也能將其設置為下述標志的組合,以允許特定功能:
標志名稱標志描述CLIENT_COMPRESS使用壓縮協議。CLIENT_FOUND_ROWS返回發現的行數(匹配的),而不是受影響的行數。CLIENT_IGNORE_SPACE允許在函數名后使用空格。使所有的函數名成為保留字。CLIENT_INTERACTIVE關閉連接之前,允許interactive_timeout秒的不活動時間。CLIENT_LOCAL_FILES允許LOAD DATA LOCAL處理功能。CLIENT_MULTI_STATEMENTS通知服務器,客戶端可能在單個字符串內發送多條語句。CLIENT_MULTI_RESULTS通知服務器,客戶端能夠處理來自多語句執行。CLIENT_NO_SCHEMA禁止db_name.tbl_name.col_name語法。CLIENT_ODBC客戶端是ODBC客戶端。它將mysqld變得更為ODBC友好。CLIENT_SSL使用SSL,該選項不應由應用程序設置,而是在客戶端庫內部設置。對于某些參數,能夠從選項文件獲得取值,而不是取得mysql_real_connect()調用中的確切值。為此,在調用mysql_real_connect()之前,應與MYSQL_READ_DEFAULT_FILE或MYSQL_READ_DEFAULT_GROUP選項一起調用mysql_options()。隨后,在mysql_real_connect()調用中,為準備從選項文件讀取值的每個參數指定“無值”值:對于host,指定NULL值或空字符串("")。對于user,指定NULL值或空字符串。對于passwd,指定NULL值。(對于密碼,mysql_real_connect()調用中的空字符串的值不能被選項文件中的字符串覆蓋,這是因為,空字符串明確指明MySQL賬戶必須有空密碼)。對于db,指定NULL值或空字符串對于port,指定“0”值。對于unix_socket,指定NULL值。對于某一參數,如果在選項文件中未發現值,將使用它的默認值,如本節前面介紹的那樣。





返回值如果連接成功,返回MYSQL*連接句柄。如果連接失敗,返回NULL。對于成功的連接,返回值與第1個參數的值相同

參考鏈接:https://blog.csdn.net/happy_stars_2016/article/details/52664656


總結

以上是生活随笔為你收集整理的Mysql —— linux下使用c语言访问mySql数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。