勇芳软件工作室.汉化:  SQLite3 API Functions > Statements >

sqlite3_stmt_readonly

Previous pageReturn to chapter overviewNext page

描述

 

当且仅当准备的语句X不对数据库文件的内容进行直接更改时,sqlite3_stmt_readonly(X)函数返回true(非零)。

 

C / C ++语法

 

int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);

 

PB语法

 

FUNCTION sqlite3_stmt_readonly ( _

BYVAL hStmt AS DWORD _

) AS LONG

 

参数

 

pStmt

 

[in]语句句柄。

 

返回值

 

对或错。

 

备注

 

请注意,应用程序定义的SQL函数或虚拟表可能会以副作用间接更改数据库。例如,如果应用程序定义了调用sqlite3_exec的函数“eval()”,则以下SQL语句将通过副作用更改数据库文件:

 

SELECT eval('DELETE FROM t1')FROM t2;

 

但是由于SELECT语句不会直接更改数据库文件,所以sqlite3_stmt_readonly仍将返回true。

 

事务控制语句(如BEGIN,COMMIT,ROLLBACK,SAVEPOINT和RELEASE)导致sqlite3_stmt_readonly返回true,因为语句本身并不实际修改数据库,而是控制其他语句修改数据库的时间。ATTACH和DETACH语句还会导致sqlite3_stmt_readonly返回true,因为这些语句更改了数据库连接的配置,它们不会更改磁盘上数据库文件的内容。

 

C ++实现代码

 

/*

** Return true if the prepared statement is guaranteed to not modify the

** database.

*/

SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){

return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;

}