在Web開發中,JSON(JavaScript Object Notation)是一種常用的數據格式。通常我們的應用程序需要將多個JSON數據存儲在后端數據庫中,以便與其它應用程序或前端交互。在使用C語言編寫后端時,將JSON數據寫進數據庫有多種方式。下面將介紹C語言如何將JSON寫進數據庫中。
首先,我們需要使用第三方庫,例如libmariadbclient或libpq。這些庫提供了用于連接數據庫和執行SQL語句的API。使用連接池是常規方式,它可以避免創建/closing數據庫連接的開銷,而使用事務可以確保數據的一致性。
#include#include #include #include //連接到數據庫 int connect_db() { MYSQL* conn = mysql_init(NULL); if (!mysql_real_connect(conn, "localhost", "testuser", "testpass", "testdata", 0, NULL, 0)) { printf("Error: %s\n", mysql_error(conn)); mysql_close(conn); return EXIT_FAILURE; } return conn; } //將json寫入數據庫 int write_json_to_db(MYSQL* conn, const char* table_name, const char* json_data) { json_object* jobj = json_tokener_parse(json_data); char* sql = malloc(strlen(json_object_to_json_string(jobj)) + 100); sprintf(sql, "INSERT INTO %s (data) VALUES('%s');", table_name, json_object_to_json_string(jobj)); int ret = mysql_query(conn, sql); free(sql); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; }
在示例代碼中,通過mysql_init()函數初始化MYSQL結構,使用mysql_real_connect()連接MySQL服務器,然后調用mysql_query()函數執行SQL語句。同時,通過json_tokener_parse()函數將JSON數據轉換為json_object,通過json_object_to_json_string()函數將其轉換為字符串,將其插入到數據庫中。
除了MySQL,還可以使用PostgreSQL等數據庫。下面是使用libpq將JSON數據寫入PostgreSQL的示例代碼:
#include#include #include #include //連接到數據庫 PGconn* connect_db() { PGconn* conn = PQconnectdb("dbname=testdata user=testuser password=testpass"); if (PQstatus(conn) != CONNECTION_OK) { printf("Error: %s\n", PQerrorMessage(conn)); PQfinish(conn); return NULL; } return conn; } //將json寫入數據庫 int write_json_to_db(PGconn* conn, const char* table_name, const char* json_data) { json_object* jobj = json_tokener_parse(json_data); char* sql = malloc(strlen(json_object_to_json_string(jobj)) + 100); sprintf(sql, "INSERT INTO %s (data) VALUES('%s');", table_name, json_object_to_json_string(jobj)); PGresult* res = PQexec(conn, sql); free(sql); int ret = PQresultStatus(res) == PGRES_COMMAND_OK ? EXIT_SUCCESS : EXIT_FAILURE; PQclear(res); return ret; }
這里使用PQconnectdb()連接到PostgreSQL服務器,PQerrorMessage()函數顯示錯誤消息。通過PQexec()執行SQL語句,并通過PQresultStatus()判斷結果是否成功。
總的來說,將JSON數據寫入數據庫需要使用第三方庫,同時需要將JSON數據轉換為字符串,然后將其插入到數據庫中。通過連接池和事務可以提高效率和數據的一致性。