c语言的数据库如何建立

c语言的数据库如何建立

在C语言中建立数据库的方法包括:使用SQLite、MySQL、ODBC、嵌入式数据库。

SQLite是一个非常流行的嵌入式数据库,它的库文件可以直接包含在C语言项目中,不需要独立的服务器进程。这使得SQLite非常适合嵌入式系统、单用户桌面应用和小型网站。其API也比较简单易用,适合初学者和对性能要求不高的项目。接下来我们将详细描述如何使用SQLite在C语言中建立一个数据库。

一、准备工作

在使用SQLite之前,需要确保开发环境中已经安装了SQLite库。可以从SQLite官网(https://www.sqlite.org/download.html)下载适用于你的操作系统的预编译库文件。然后,将这些库文件添加到你的C语言项目中。

下载与安装SQLite库

  1. 访问SQLite官网并下载适合你的操作系统的预编译库文件。
  2. 将下载的库文件解压到一个指定的目录中。
  3. 在你的C语言项目中,添加SQLite库的包含路径和库文件路径。

以下是一个在Linux环境下配置SQLite库的示例:

gcc -o my_program my_program.c -lsqlite3

在Windows环境下,需要在编译选项中添加SQLite库文件的路径:

gcc -o my_program my_program.c -IC:pathtosqliteinclude -LC:pathtosqlitelib -lsqlite3

二、连接到数据库

连接到SQLite数据库非常简单,只需要调用sqlite3_open函数即可。如果数据库文件不存在,SQLite会自动创建一个新的数据库文件。

#include <stdio.h>

#include <sqlite3.h>

int main() {

sqlite3 *db;

int rc;

rc = sqlite3_open("test.db", &db);

if (rc) {

fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));

return 0;

} else {

fprintf(stdout, "Opened database successfullyn");

}

sqlite3_close(db);

return 0;

}

三、创建表

使用sqlite3_exec函数来执行SQL语句。以下代码展示了如何在数据库中创建一个名为COMPANY的表:

#include <stdio.h>

#include <sqlite3.h>

int main() {

sqlite3 *db;

char *zErrMsg = 0;

int rc;

char *sql;

rc = sqlite3_open("test.db", &db);

if (rc) {

fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));

return 0;

} else {

fprintf(stdout, "Opened database successfullyn");

}

sql = "CREATE TABLE COMPANY("

"ID INT PRIMARY KEY NOT NULL,"

"NAME TEXT NOT NULL,"

"AGE INT NOT NULL,"

"ADDRESS CHAR(50),"

"SALARY REAL );";

rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);

if (rc != SQLITE_OK) {

fprintf(stderr, "SQL error: %sn", zErrMsg);

sqlite3_free(zErrMsg);

} else {

fprintf(stdout, "Table created successfullyn");

}

sqlite3_close(db);

return 0;

}

四、插入数据

同样地,使用sqlite3_exec函数来插入数据:

#include <stdio.h>

#include <sqlite3.h>

int main() {

sqlite3 *db;

char *zErrMsg = 0;

int rc;

char *sql;

rc = sqlite3_open("test.db", &db);

if (rc) {

fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));

return 0;

} else {

fprintf(stdout, "Opened database successfullyn");

}

sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "

"VALUES (1, 'Paul', 32, 'California', 20000.00 ); "

"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "

"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "

"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "

"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); "

"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "

"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";

rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);

if (rc != SQLITE_OK) {

fprintf(stderr, "SQL error: %sn", zErrMsg);

sqlite3_free(zErrMsg);

} else {

fprintf(stdout, "Records created successfullyn");

}

sqlite3_close(db);

return 0;

}

五、查询数据

使用sqlite3_exec和回调函数来查询数据:

#include <stdio.h>

#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char argv, char azColName) {

int i;

for (i = 0; i < argc; i++) {

printf("%s = %sn", azColName[i], argv[i] ? argv[i] : "NULL");

}

printf("n");

return 0;

}

int main() {

sqlite3 *db;

char *zErrMsg = 0;

int rc;

char *sql;

rc = sqlite3_open("test.db", &db);

if (rc) {

fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));

return 0;

} else {

fprintf(stdout, "Opened database successfullyn");

}

sql = "SELECT * from COMPANY";

rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);

if (rc != SQLITE_OK) {

fprintf(stderr, "SQL error: %sn", zErrMsg);

sqlite3_free(zErrMsg);

} else {

fprintf(stdout, "Operation done successfullyn");

}

sqlite3_close(db);

return 0;

}

六、更新和删除数据

更新和删除数据的方式与插入数据类似,仍然使用sqlite3_exec函数:

更新数据

sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " 

"SELECT * from COMPANY";

rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);

if (rc != SQLITE_OK) {

fprintf(stderr, "SQL error: %sn", zErrMsg);

sqlite3_free(zErrMsg);

} else {

fprintf(stdout, "Operation done successfullyn");

}

删除数据

sql = "DELETE from COMPANY where ID=2; " 

"SELECT * from COMPANY";

rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);

if (rc != SQLITE_OK) {

fprintf(stderr, "SQL error: %sn", zErrMsg);

sqlite3_free(zErrMsg);

} else {

fprintf(stdout, "Operation done successfullyn");

}

七、使用MySQL

除了SQLite,MySQL也是一个常见的数据库选择。使用MySQL需要安装MySQL服务器和开发库,并使用MySQL的C API。

安装MySQL开发库

在Linux上,可以使用包管理器安装:

sudo apt-get install libmysqlclient-dev

在Windows上,可以从MySQL官网下载开发库。

连接到MySQL数据库

#include <mysql/mysql.h>

#include <stdio.h>

#include <stdlib.h>

int main() {

MYSQL *conn;

MYSQL_RES *res;

MYSQL_ROW row;

char *server = "localhost";

char *user = "root";

char *password = "password";

char *database = "testdb";

conn = mysql_init(NULL);

if (conn == NULL) {

fprintf(stderr, "mysql_init() failedn");

exit(EXIT_FAILURE);

}

if (mysql_real_connect(conn, server, user, password, database, 0, NULL, 0) == NULL) {

fprintf(stderr, "mysql_real_connect() failedn");

mysql_close(conn);

exit(EXIT_FAILURE);

}

if (mysql_query(conn, "SHOW TABLES")) {

fprintf(stderr, "SHOW TABLES failed. Error: %sn", mysql_error(conn));

mysql_close(conn);

exit(EXIT_FAILURE);

}

res = mysql_store_result(conn);

if (res == NULL) {

fprintf(stderr, "mysql_store_result() failed. Error: %sn", mysql_error(conn));

mysql_close(conn);

exit(EXIT_FAILURE);

}

while ((row = mysql_fetch_row(res)) != NULL) {

printf("%s n", row[0]);

}

mysql_free_result(res);

mysql_close(conn);

exit(EXIT_SUCCESS);

}

八、使用ODBC

ODBC(Open Database Connectivity)提供了一种独立于数据库的接口,可以连接到多种数据库。使用ODBC需要安装ODBC驱动和开发库。

安装ODBC开发库

在Linux上,可以使用包管理器安装:

sudo apt-get install unixodbc unixodbc-dev

在Windows上,可以从Microsoft官网下载ODBC驱动程序。

连接到数据库

#include <stdio.h>

#include <stdlib.h>

#include <sql.h>

#include <sqlext.h>

int main() {

SQLHENV env;

SQLHDBC dbc;

SQLHSTMT stmt;

SQLRETURN ret;

SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);

SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);

SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

SQLCHAR *dsn = (SQLCHAR*)"DSN=mydsn;UID=myuser;PWD=mypassword";

SQLDriverConnect(dbc, NULL, dsn, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

SQLExecDirect(stmt, (SQLCHAR*)"SELECT * FROM mytable", SQL_NTS);

SQLCHAR column1[50];

while (SQLFetch(stmt) == SQL_SUCCESS) {

SQLGetData(stmt, 1, SQL_C_CHAR, column1, sizeof(column1), NULL);

printf("%sn", column1);

}

SQLFreeHandle(SQL_HANDLE_STMT, stmt);

SQLDisconnect(dbc);

SQLFreeHandle(SQL_HANDLE_DBC, dbc);

SQLFreeHandle(SQL_HANDLE_ENV, env);

return 0;

}

九、嵌入式数据库

在某些情况下,嵌入式数据库如Berkeley DB也可以作为选择。嵌入式数据库通常不需要独立的服务器进程,适合嵌入式系统和资源受限的环境。

安装Berkeley DB

在Linux上,可以使用包管理器安装:

sudo apt-get install libdb-dev

在Windows上,可以从Oracle官网下载Berkeley DB。

使用Berkeley DB

#include <db.h>

#include <stdio.h>

#include <stdlib.h>

int main() {

DB *dbp;

DBT key, data;

int ret;

ret = db_create(&dbp, NULL, 0);

if (ret != 0) {

fprintf(stderr, "db_create: %sn", db_strerror(ret));

return 1;

}

ret = dbp->open(dbp, NULL, "mydb.db", NULL, DB_BTREE, DB_CREATE, 0);

if (ret != 0) {

fprintf(stderr, "DB->open: %sn", db_strerror(ret));

return 1;

}

memset(&key, 0, sizeof(DBT));

memset(&data, 0, sizeof(DBT));

key.data = "mykey";

key.size = sizeof("mykey");

data.data = "mydata";

data.size = sizeof("mydata");

ret = dbp->put(dbp, NULL, &key, &data, 0);

if (ret != 0) {

fprintf(stderr, "DB->put: %sn", db_strerror(ret));

return 1;

}

ret = dbp->get(dbp, NULL, &key, &data, 0);

if (ret == 0) {

printf("key: %s, data: %sn", (char *)key.data, (char *)data.data);

} else {

fprintf(stderr, "DB->get: %sn", db_strerror(ret));

}

ret = dbp->close(dbp, 0);

if (ret != 0) {

fprintf(stderr, "DB->close: %sn", db_strerror(ret));

return 1;

}

return 0;

}

十、总结

在C语言中建立数据库的方法多种多样,选择合适的方法取决于具体的项目需求和环境。SQLite适合嵌入式系统和小型项目,MySQL适合中大型项目,ODBC提供了数据库无关的接口,嵌入式数据库如Berkeley DB适合资源受限的环境。无论选择哪种方法,都需要根据项目需求进行合理的设计和优化。

推荐的项目管理系统:

  • 研发项目管理系统PingCode:适合研发团队,可以高效管理项目进度、任务分配和资源调度。
  • 通用项目协作软件Worktile:适合各种类型的项目协作,功能全面,易于使用。

通过使用这些工具,可以更好地管理和协作,提高项目开发效率。

相关问答FAQs:

1. 什么是C语言的数据库建立?
C语言的数据库建立是指使用C语言编程来创建和管理数据库系统。通过C语言,可以实现数据的存储、检索、更新和删除等操作,为用户提供高效、可靠的数据管理解决方案。

2. 如何在C语言中建立数据库?
在C语言中建立数据库需要使用数据库管理系统(DBMS)和对应的C语言库。常用的C语言库包括SQLite、MySQL和PostgreSQL等。首先,需要安装所需的C语言库,并在C语言程序中包含相关的头文件。然后,通过编写C语言代码,使用DBMS提供的API来创建数据库、定义表格结构以及进行数据的插入、查询和更新等操作。

3. C语言中如何连接和操作数据库?
在C语言中连接和操作数据库需要使用DBMS提供的API。首先,需要使用API提供的函数来建立与数据库的连接。然后,可以通过编写SQL语句来执行各种数据库操作,例如创建表格、插入数据、查询数据和更新数据等。最后,通过API提供的函数来关闭与数据库的连接,确保数据库的安全关闭。在操作数据库时,需要注意处理异常情况,例如连接失败、SQL语句执行错误等。

原创文章,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/1864309

(0)
Edit1Edit1
上一篇 5天前
下一篇 5天前
免费注册
电话联系

4008001024

微信咨询
微信咨询
返回顶部