Linux下C語言Mysql數據庫使用範例

數據庫:

CREATE DATABASE test;

CREATE TABLE `test` (
    `id` int(11) NOT NULL auto_increment,

    PRIMARY KEY (`id`)
);

ALTER TABLE `test`

    ADD COLUMN `name` varchar(20);


 ============================================================================
 Name        : mysql_test.c
 Author      :
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <mysql/mysql.h>

MYSQL *g_conn; // mysql 連接
 MYSQL_RES *g_res; // mysql 記錄集
 MYSQL_ROW g_row; // 字符串數組,mysql 記錄行
 
#define MAX_BUF_SIZE 1024 // 緩衝區最大字節數

const char *g_host_name = "localhost";
const char *g_user_name = "root";
const char *g_password = "root";
const char *g_db_name = "test";
const unsigned int g_db_port = 3306;

void print_mysql_error(const char *msg) { // 打印最後一次錯誤
    if (msg)
        printf("%s: %s\n", msg, mysql_error(g_conn));
    else
        puts(mysql_error(g_conn));
}

int executesql(const char * sql) {
    /*query the database according the sql*/
    if (mysql_real_query(g_conn, sql, strlen(sql))) // 如果失敗
        return -1; // 表示失敗

    return 0; // 成功執行
}


int init_mysql() { // 初始化連接
    // init the database connection
    g_conn = mysql_init(NULL);

    /* connect 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; // 返回成功
}


int main(void) {
    puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */

    if (init_mysql());
        print_mysql_error(NULL);

    char sql[MAX_BUF_SIZE];
    sprintf(sql, "INSERT INTO `test`(`name`) VALUES('testname')");

    if (executesql(sql))
        print_mysql_error(NULL);

    if (executesql("SELECT * FROM `test`")) // 句末沒有分號
        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);

    puts("id\tname\n");

    while ((g_row=mysql_fetch_row(g_res))) // 打印結果集
        printf("%s\t%s\n", g_row[0], g_row[1]); // 第一,第二字段

    mysql_free_result(g_res); // 釋放結果集

    mysql_close(g_conn); // 關閉鏈接

    return EXIT_SUCCESS;
}


編譯命令:gcc mysqltest.c -lmysqlclient

運行結果:

!!!Hello World!!!

共1個記錄,每個記錄2字段
id    name

2    testname

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章