常见问题 SYBASE/赛贝斯数据库软件的常见问题>>

SQLITE_SCHEMA error是什么错误?为什么会出现该错误?

发布时间:2010-11-10 15:44:52

答案:

 当一个准备好的(prepared)SQL语句不再有效或者无法执行时, 将返回一个 SQLITE_SCHEMA 错误。发生该错误时,SQL语句必须使用 sqlite3_prepare() API来重新编译. 在 SQLite 3 中, 一个 SQLITE_SCHEMA 错误只会发生在用 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 执行 SQL 时。而不会发生在使用 sqlite3_exec()时。 在版本2中不是这样。

  准备好的语句失效的最通常原因是:在语句准备好后, 数据库的模式又被修改了。另外的原因会发生在:

  数据库离线:DETACHed.

  数据库被 VACUUMed

  一个用户存储过程定义被删除或改变。

  一个 collation 序列定义被删除或改变。

  认证函数被改变。

  在所有情况下,解决方法是重新编译并执行该SQL语句。 因为一个已准备好的语句可以由于其它进程改变数据库模式而失效, 所有使用 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 的代码都应准备处理 SQLITE_SCHEMA 错误。下面给出一个例子:

  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 erro

下一步您可以:
查看SYBASE/赛贝斯数据库软件产品 >>
查看数据库软件产品 >>
查看SYBASE/赛贝斯数据库软件常见问题 >>

最新在线问题