2010-04-19 36 views
5

什麼是支持C的好數據庫?我想要一個數據庫,可以在程序關閉時保持更改,並在用戶啓動程序時檢索它們。我想也許像SQLite或Berkeley DB。一些文檔也會很好。我只需要一個帶有C庫的數據庫。它將用於本地存儲簡單信息,如與char *相對應的鍵(char *)好的數據庫與C庫?

+1

你正在尋找一個嵌入式數據庫或遠程數據庫? – 2010-04-19 00:37:12

+4

SQLite和Berkeley DB都是原生C庫....我錯過了什麼嗎? – 2010-04-19 00:37:15

+0

當你說「我想要一個數據庫可以在程序關閉時保持更改並在用戶啓動程序時檢索它們」這是否意味着配置數據?或者是數據庫讀取數據操作它,然後隨着它的發展而寫入(CRUD操作)? – 2010-04-19 01:18:32

回答

8

對於嵌入式數據,請嘗試SQLite。

儘管如果它只是程序的單個實例的程序設置,那麼XML文件可能是您最好的選擇。 C有許多免費的XML解析器。

3

PostgreSQL附帶libpq,它是一個C庫。

+0

你想使用一個成熟的企業級數據庫來存儲程序設置嗎?這有點矯枉過正,不是嗎? – 2010-04-19 00:54:30

+0

是的,我也喜歡postgres,但def。矯枉過正的設置... – 2010-04-19 01:22:11

0

取決於您需要存儲和檢索的內容以及其他用於選擇其中一個選項的條件。

您可以讀寫文件。

您可以使用您提到的數據庫 - 它們都具有出色的文檔並且是免費的。

您可以使用任何開源或商業RDBMS - 優秀的文檔。 (MySQL的PostgreSQL的,火鳥等...開源)(甲骨文,DB/2時,Sybase,SQLServer的,等...)

+0

該問題指出,OP想存儲程序設置。 – 2010-04-19 00:55:05

+0

@Robert Harvey - 我想要一個數據庫,可以在程序關閉時保持更改,並在用戶啓動程序時檢索它們 暗示我想在程序啓動時讀取一些信息,並在程序關閉前寫入它。我還將其作爲持久數據在運行時讀取 - 我會問 – 2010-04-19 01:16:35

0

對於簡單的任務,你可以使用:www.simpledatabase.org

#include "DB.h" 

// Define client structure (register) 

typedef struct 
{ 
    unsigned int id; 
    char name[60]; 
    short int age; 
} clientSt; 

int main() 
{ 
    // Allocate a client structure 
    clientSt client; 

    // Create client database 
    db_Create("ClientList.db", sizeof(clientSt)); 

    // Open client database 
    db_Open("ClientList.db", "ClientList"); 

    // Add client register 1 
    client.id = 1; 
    strncpy(client.name, "Bob", sizeof(client.name)); 
    client.age = 38; 
    db_CreateRegister((const void*)&client); 

    // Add client register 2 
    client.id = 2; 
    strncpy(client.name, "Alice", sizeof(client.name)); 
    client.age = 20; 
    db_CreateRegister((const void*)&client); 

    // Add client register 3 
    client.id = 3; 
    strncpy(client.name, "John", sizeof(client.name)); 
    client.age = 25; 
    db_CreateRegister((const void*)&client); 

    // Print all registers 
    db_GoToBegin(); 
    do 
    { 
     db_GetRegister(&client); 
     printf("ID: %d Name = %s Age = %d\n", client.id, client.name, client.age); 
    }while(db_GoToNext() != DB_FALSE); 

    // Close database 
    db_Close("ClientList"); 

    // Checks if any error occurred 
    if(db_GetError()) 
    { 
     printf("Error: %s\n", db_GetErrorMessage()); 
    } 

    return(0); 
} 
+1

基於鏈接的答案通常是不好的答案,從此鏈接提取一些信息,然後留下URI以供參考 – Mysterion 2015-02-01 12:16:24