我的代码对于区分Sql语句是否为SELECT是必需的。
如果结果大于1,则很容易区分选择。
但是执行语句时没有结果,如何区分呢?
sqlite_stmt *some_stmt;
//case 1 : (the table has no row)
sqlite3_prepare("select * from some_table", &some_stmt);
//case 2 :
sqlite3_prepare("create table some_table2", &some_stmt);
int result = sqlite3_step(some_stmt);
结果是相同的:
SQLITE_DONE;
我可以用两种方法来区分它
第一个是从语句中获取子字符串。但我不想这样做,这似乎是错误的方式。
第二个是使用
sqlite3_column_count()
。通常,如果该语句为SELECT,则column_count具有一个或多个。使用
sqlite3_coulmn_count()
是否正确?在sqlite等中没有No-column-table吗?我想要正确的方法来区分Statement是否为SELECT。
最佳答案
还有其他返回数据的语句(例如某些PRAGMA),因此您无法搜索“ SELECT”。
与documented一样,sqlite3_column_count()
是正确的方法:
如果pStmt是不返回数据的SQL语句(例如UPDATE),则此例程返回0。
在SQL中,没有像没有列的表这样的东西。即使在实际上不查看任何数据的构造中(例如EXISTS (SELECT ...)
),也必须使用一些虚拟列。
关于c++ - vc++(sqlite)如何区分语句是SELECT还是NOT?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37827906/