在另一个语句到位时创建并删除表

时间:2013-05-10 05:48:29

标签: c sqlite

在我之前的实现中,我将sqlite3表中的结果直接传输到我的输出应用程序中。但是,由于我将接口更改为临时数据结构,因此我现在需要获取行数。这样做的首选方法似乎是临时表,所以我原来的

sprintf(query,"SELECT %s AS x, AVG(%s) AS y, AVG((%s)*(%s)) AS ysq FROM %s WHERE %s=%s AND %s GROUP BY x;",x,y,y,y,from,across,val,where);
sqlite3_prepare_v2(db, query, -1, &acResult,NULL);
while(sqlite3_step(acResult)==SQLITE_ROW) { ... }
sqlite3_finalize(acResult);

变成

sprintf(query,"CREATE TEMP TABLE tt AS SELECT %s AS x, AVG(%s) AS y, AVG((%s)*(%s)) AS ysq FROM %s WHERE %s=%s AND %s GROUP BY x;",x,y,y,y,from,across,val,where);
sqlite3_prepare_v2(db, query, -1, &acResult,NULL);
sqlite3_step(acResult);
sqlite3_finalize(acResult);

sqlite3_prepare_v2(db, "SELECT COUNT(*) FROM tt;", -1, &acResult, NULL);
sqlite3_step(acResult);
int length = sqlite3_column_int(acResult,0);
sqlite3_finalize(acResult);

sqlite3_prepare_v2(db, "SELECT x,y, ysq FROM tt;", -1, &acResult, NULL);
while(sqlite3_step(acResult)==SQLITE_ROW) { ... }
sqlite3_finalize(acResult);
sqlite3_prepare_v2(db, "DROP TABLE tt;", -1, &acResult, NULL);
sqlite3_step(acResult);
sqlite3_finalize(acResult);

现在,这大部分都有效。问题是我在另一个步进查询的循环中有这个,这似乎是当我尝试删除它时表被锁定的原因。如果我最终确定该查询,它“工作”(drop工作;其他一切都会中断,因为它是逻辑的一部分)。外部查询无法引用tt,因为我在“范围”内创建了它。

有没有办法提醒sqlite它不应该被锁定,或者我是否仍然不能将外环从流媒体中移开?

这是一个只读应用程序(临时表除外),如果有帮助的话。

0 个答案:

没有答案