INSERT INTO
语句,指定表名、列和对应的值。 INSERT INTO table_name (column1, column2) VALUES (value1, value2);
在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
);
在Ubuntu系统上,可以使用以下命令安装MySQL开发库:
sudo apt-get update
sudo apt-get install libmysqlclient-dev
在Windows系统上,可以从MySQL官方网站下载并安装相应的开发库。
下面是一个使用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字符串,以下是使用参数化查询的示例:
#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
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_query
或mysql_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注入攻击,希望这些内容对你有所帮助,祝你编程愉快!