SQLITE_SCHEMA 错误代表什么

在 SQLite 版本3中,当一个预处理 SQL 语句不合法不能执行时就会返回一个 SQLITE_SCHEMA 错误。当这个错误发生时,该语句应当用 sqlite3_prepare() API函数重新编译。在 SQLite 版本3中,只有使用 sqlite3_prepare ()/sqlite3_step()/sqlite3_finalize() API函数执行 SQL 才会发生这个错误,而使用 sqlite3_exec(). 则不会。这与版本2不同。 

大部分发生这个错误的原因是当 SQL 预处理完时数据库已经改变了(可能是被另一个进程改变的)。还可能有如下原因: 

* 对一个数据库进行DETACH操作 
* 对一个数据库进行VACUUM操作 
* 一个用户函数定义被删除或改变了。 
* 一个排序定义被删除或改变了。 
* 一个授权函数改变了。 

解决的办法是重新编译并再次尝试执行。所有涉及 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 函数的都应当重新编译。参见下例: 

int rc; 
sqlite3_stmt *pStmt; 
char zSql[] = "SELECT ....."; 

do { 
/* Compile the statement from SQL. Assume success. */ 
sqlite3_prepare(pDb, zSql, -1, &pStmt, 0); 

while( SQLITE_ROW==sqlite3_step(pStmt) ){ 
/* Do something with the row of available data */ 


/* Finalize the statement. If an SQLITE_SCHEMA error has 
** occured, then the above call to sqlite3_step() will have 
** returned SQLITE_ERROR. sqlite3_finalize() will return 
** SQLITE_SCHEMA. In this case the loop will execute again. 
*/ 
rc = sqlite3_finalize(pStmt); 
} while( rc==SQLITE_SCHEMA ); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值