c,#include,#include,#includeint main() {, MYSQL conn;, MYSQL_RES res;, MYSQL_ROW row; const char server = "localhost";, const char user = "root";, const char password = "your_password"; / 请在此处设置你的密码 /, const char database = "testdb"; conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {, fprintf(stderr, "%s,", mysql_error(conn));, exit(1);, } if (mysql_query(conn, "SELECT FROM your_table")) {, fprintf(stderr, "%s,", mysql_error(conn));, exit(1);, } res = mysql_use_result(conn); while ((row = mysql_fetch_row(res)) != NULL) {, printf("%s ,", row[0]); // 假设你只需要第一列的数据, } mysql_free_result(res);, mysql_close(conn); return 0;,},
` 关键点说明1. 包含头文件:需要包含
mysql/mysql.h 头文件来使用 MySQL C API。,2. 初始化和连接:使用
mysql_init 初始化一个新的 MYSQL 对象,然后使用
mysql_real_connect 连接到数据库。,3. 执行查询:使用
mysql_query 执行 SQL 查询。,4. 处理结果:使用
mysql_use_result 获取结果集,并用
mysql_fetch_row 逐行读取结果。,5. 清理资源:用
mysql_free_result 释放结果集内存,用
mysql_close 关闭连接。 注意事项确保你已经安装了 MySQL 开发库,并在编译时链接相应的库。使用
gcc 编译时加上
-lmysqlclient`。,替换示例代码中的数据库连接参数(如用户名、密码、数据库名等)为你自己的值。,根据你的实际需求修改 SQL 查询语句和结果处理逻辑。
在数据库开发领域,C语言因其高效性和灵活性而备受青睐,以下是两个使用C语言进行数据库开发的实例源码及其详细解释:
该实例实现了一个基本的学生管理系统,包括学生信息的录入、查询、修改和删除等功能,系统使用SQLite作为后端数据库,通过C语言与数据库进行交互。
数据库连接:使用sqlite3_open
函数打开数据库连接,如果连接成功,返回SQLITE_OK
。
int rc = sqlite3_open("student.db", &db); if (rc != SQLITE_OK) { fprintf(stderr, "Cannot open database: %s ", sqlite3_errmsg(db)); sqlite3_close(db); return 1; }
创建表:使用SQL语句创建一个名为students
的表,包含id
、name
、age
和grade
等字段。
char sql = "CREATE TABLE IF NOT EXISTS students (" "id INTEGER PRIMARY KEY AUTOINCREMENT," "name TEXT NOT NULL," "age INTEGER," "grade REAL);"; rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Table created successfully "); }
插入数据:向students
表中插入一条新记录。
sql = "INSERT INTO students (name, age, grade) VALUES ('Alice', 20, 85.5);"; rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Records created successfully "); }
查询数据:查询并打印所有学生的信息。
sql = "SELECT FROM students;"; rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); }
回调函数:用于处理查询结果的回调函数。
static int callback(void NotUsed, int argc, charargv, charazColName) { for (int i = 0; i < argc; i++) { printf("%s = %s ", azColName[i], argv[i] ? argv[i] : "NULL"); } printf(" "); return 0; }
编译并运行上述代码后,将创建一个名为student.db
的数据库文件,并在其中创建一个students
表,随后,程序将向表中插入一条记录,并查询并打印所有学生的信息。
该实例实现了一个简单的图书馆管理系统,包括图书信息的录入、查询、借阅和归还等功能,系统同样使用SQLite作为后端数据库,并通过C语言与数据库进行交互。
数据库连接与表创建:与学生管理系统类似,首先建立与SQLite数据库的连接,并创建一个名为books
的表,包含id
、title
、author
、quantity
和borrowed
等字段。
// 连接到数据库 int rc = sqlite3_open("library.db", &db); if (rc != SQLITE_OK) { fprintf(stderr, "Cannot open database: %s ", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } // 创建books表 char sql = "CREATE TABLE IF NOT EXISTS books (" "id INTEGER PRIMARY KEY AUTOINCREMENT," "title TEXT NOT NULL," "author TEXT NOT NULL," "quantity INTEGER," "borrowed INTEGER);"; rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Table created successfully "); }
插入图书信息:向books
表中插入一条新图书记录。
sql = "INSERT INTO books (title, author, quantity, borrowed) VALUES ('C Programming Language', 'Kernighan and Ritchie', 5, 0);"; rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Record inserted successfully "); }
查询图书信息:查询并打印所有图书的信息。
sql = "SELECT FROM books;"; rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); }
借阅图书:更新图书的借阅状态和数量。
sql = "UPDATE books SET quantity = quantity 1, borrowed = borrowed + 1 WHERE id = 1;"; rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Book borrowed successfully "); }
归还图书:更新图书的借阅状态和数量(归还操作)。
sql = "UPDATE books SET quantity = quantity + 1, borrowed = borrowed 1 WHERE id = 1;"; rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Book returned successfully "); }
编译并运行上述代码后,将创建一个名为library.db
的数据库文件,并在其中创建一个books
表,随后,程序将向表中插入一条图书记录,并演示如何查询、借阅和归还图书。
1、问:为什么选择SQLite作为后端数据库?
答:SQLite是一个轻量级的嵌入式数据库,它不需要独立的服务器进程,非常适合于小型项目和学习用途,SQLite提供了丰富的C语言接口,方便与C语言程序集成。
2、问:如何编译和运行这些实例源码?
答:为了编译和运行这些实例源码,你需要安装SQLite的开发库,并在编译时链接SQLite库,以Linux系统为例,你可以使用以下命令进行编译:
gcc -o student_management student_management.c -lsqlite3 ./student_management
对于Windows系统,你需要确保已安装了SQLite的开发环境,并在编译时正确设置了包含目录和库目录。