我有一个使用以下命令行连接到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 ++中的类似内容?
答案 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}}