当前位置:首页 > 行业动态 > 正文

c 向数据库添加数据

向数据库添加数据通常涉及使用SQL的 INSERT INTO语句,指定表名、列和对应的值。 INSERT INTO table_name (column1, column2) VALUES (value1, value2);

C语言向数据库添加数据

在C语言中,向数据库添加数据通常需要借助数据库提供的API或库函数,以下是使用MySQL数据库的示例,展示了如何在C语言中连接数据库并向表中插入数据。

准备工作

确保你的系统上已经安装了MySQL数据库,并且创建了相应的数据库和表,创建一个名为test_db的数据库和一个名为users的表:

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

安装MySQL开发库

在Ubuntu系统上,可以使用以下命令安装MySQL开发库:

sudo apt-get update
sudo apt-get install libmysqlclient-dev

在Windows系统上,可以从MySQL官方网站下载并安装相应的开发库。

编写C代码

下面是一个使用C语言向MySQL数据库添加数据的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
void finish_with_error(MYSQL *con) {
    fprintf(stderr, "%s
", mysql_error(con));
    mysql_close(con);
    exit(1);
}
int main() {
    MYSQL *con = mysql_init(NULL);
    if (con == NULL) {
        fprintf(stderr, "mysql_init() failed
");
        exit(1);
    }
    if (mysql_real_connect(con, "localhost", "root", "password", "test_db", 0, NULL, 0) == NULL) {
        finish_with_error(con);
    }
    if (mysql_query(con, "INSERT INTO users(name, age) VALUES('Alice', 30)")) {
        finish_with_error(con);
    }
    if (mysql_query(con, "INSERT INTO users(name, age) VALUES('Bob', 25)")) {
        finish_with_error(con);
    }
    mysql_close(con);
    printf("Data inserted successfully!
");
    return 0;
}

编译和运行

将上述代码保存为insert_data.c,然后使用以下命令编译和运行:

gcc insert_data.c -o insert_data $(mysql_config --cflags --libs)
./insert_data

如果一切正常,你将在终端中看到“Data inserted successfully!”的消息,并且可以在MySQL命令行工具中验证数据是否已成功插入:

USE test_db;
SELECT * FROM users;

参数化查询(防止SQL注入)

为了提高安全性,建议使用参数化查询而不是直接拼接SQL字符串,以下是使用参数化查询的示例:

#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
void finish_with_error(MYSQL *con) {
    fprintf(stderr, "%s
", mysql_error(con));
    mysql_close(con);
    exit(1);
}
int main() {
    MYSQL *con = mysql_init(NULL);
    MYSQL_STMT *stmt;
    MYSQL_BIND bind[2];
    char name[50] = "Charlie";
    int age = 35;
    if (con == NULL) {
        fprintf(stderr, "mysql_init() failed
");
        exit(1);
    }
    if (mysql_real_connect(con, "localhost", "root", "password", "test_db", 0, NULL, 0) == NULL) {
        finish_with_error(con);
    }
    stmt = mysql_stmt_init(con);
    if (!stmt) {
        finish_with_error(con);
    }
    if (mysql_stmt_prepare(stmt, "INSERT INTO users(name, age) VALUES(?, ?)", -1)) {
        finish_with_error(con);
    }
    memset(bind, 0, sizeof(bind));
    bind[0].buffer_type = MYSQL_TYPE_STRING;
    bind[0].buffer = name;
    bind[0].buffer_length = strlen(name);
    bind[1].buffer_type = MYSQL_TYPE_LONG;
    bind[1].buffer = &age;
    bind[1].is_null = 0;
    if (mysql_stmt_bind_param(stmt, bind)) {
        finish_with_error(con);
    }
    if (mysql_stmt_execute(stmt)) {
        finish_with_error(con);
    }
    mysql_stmt_close(stmt);
    mysql_close(con);
    printf("Data inserted successfully with parameterized query!
");
    return 0;
}

编译和运行参数化查询代码

同样地,将上述代码保存为insert_data_param.c,然后使用相同的命令进行编译和运行:

gcc insert_data_param.c -o insert_data_param $(mysql_config --cflags --libs)
./insert_data_param

FAQs

Q1: 如何修改数据库连接信息?

A1: 在mysql_real_connect函数中修改主机名、用户名、密码和数据库名。

if (mysql_real_connect(con, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {
    finish_with_error(con);
}

Q2: 如何处理插入失败的情况?

A2: 在插入数据后,检查mysql_querymysql_stmt_execute的返回值,如果返回非零值,说明执行失败,可以调用mysql_error获取错误信息并进行相应处理。

if (mysql_query(con, "INSERT INTO users(name, age) VALUES('Alice', 30)")) {
    fprintf(stderr, "Insert failed: %s
", mysql_error(con));
    finish_with_error(con);
}

小编有话说

通过上述示例,我们学习了如何在C语言中使用MySQL C API向数据库添加数据,无论是直接拼接SQL字符串还是使用参数化查询,都需要确保正确处理错误和异常情况,为了提高代码的安全性和可维护性,推荐使用参数化查询来防止SQL注入攻击,希望这些内容对你有所帮助,祝你编程愉快!

0