2015-09-01 75 views
1

我有一個C++程序,使用下面的命令行連接到SQLITE3:如何以編程方式設置Sqlite PRAGMA選項(即「primary_key = On」)?

int ret = sqlite3_open("databasefilename", &dbHandler); 

打開數據庫後,我需要啓用PRIMARY_KEYS,就像我會做用普通的SQL:

sqlite> PRAGMA foreign_keys = ON; 

是否有一個C++單一的命令,可以讓我做到這一點?我知道在PHP上我們可以使用:

 $service = new \Sqlite3($filename); 
     $service->enforceForeignKeys(true); 

在C++中有類似的東西嗎?

回答

1

In the C/C++ API for SQLite,外鍵約束的實施選項是在你的電話指定sqlite3_db_config()

sqlite3* db; 
int err = sqlite3_open("databaseFileName", &db); 
if(err != SQLITE_OK) /* die */ 

int fkeyConstraintsEnabled; 
err = sqlite3_db_config(db, SQLITE_DBCONFIG_ENABLE_FKEY, /* either 0 or 1 to disable/enable constraints */, &fkeyConstraintsEnabled); 
if(err != SQLITE_OK) /* die */ 

printf("Constraints now enabled: %d\r\n", fkeyConstraintsEnabled); 

可以想象,你可以寫一個函數來包裝這個在C/C++:

void enforceForeignKeys(sqlite3* db, bool enforceForeignKeyConstraints) { 

    int expectedNewValue = enforceForeignKeyConstraints ? 1 : 0; 
    int actualNewValue; 

    int err = sqlite3_db_config(db, SQLITE_DBCONFIG_ENABLE_FKEY, expectedNewValue, &actualNewValue); 
    if(err != SQLITE_OK) throw err; 
    if(actualNewValue != expectedNewValue) throw SOME_USER_DEFINED_ERROR; 
} 
+0

完美的作品。謝謝... – Mendes

相關問題