如何以编程方式设置Sqlite PRAGMA选项(即“primary_key = On”)?

时间:2015-09-01 23:53:16

标签: c++ sqlite

我有一个使用以下命令行连接到Sqlite3的C ++程序:

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 个答案:

答案 0 :(得分:1)

In the C/C++ API for SQLite,您对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 ); 的调用中指定了外键约束强制执行选项:

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;
}

可以想象,您可以编写一个函数来将其包装在C / C ++中:

{{1}}