2015-09-01 53 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

相关问题