我正在尝试使用C创建一个数据库。我创建了一个名为newCell的表,并向其中插入了一些值。现在,我希望遍历所有行,并从每行6列中的3列获取值。我一直在尝试执行类似于this和this link的操作。它将值插入表中,但它似乎没有打印出来。我希望将值插入到表中,然后遍历它们并打印xCell、yCell和zCell列。下面是我的代码:
`#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
int main()
{
char* err;
sqlite3* db;
sqlite3_stmt* stmt;
sqlite3_open("DB_test.db", &db);
double result;
double x,y,z;
char table[]= "CREATE TABLE IF NOT EXISTS newCell\
(id INTEGER PRIMARY KEY AUTOINCREMENT,\
xCell REAL NOT NULL,\
yCell REAL,\
zCell REAL,\
volume REAL,\
count INTEGER DEFAULT 1,\
CONSTRAINT name_unique UNIQUE (xCell,yCell,zCell)\
);";
int rc = sqlite3_exec(db,table, NULL, NULL,&err);
if(rc != SQLITE_OK){
printf("error1: %s\n", err);
}
for(int i = 0; i<10; i++){
char query[]= "INSERT INTO newCell(xCell,yCell,zCell,volume,count)\
VALUES(3.8,6.3,4.22,2.112,1)\
ON CONFLICT(xCell,yCell,zCell) DO UPDATE SET count=count+1";
rc = sqlite3_exec(db,query,NULL,NULL,&err);
if(rc != SQLITE_OK){
printf("error2: %s\n", err);
}
}
double ret = sqlite3_prepare_v2(db,"SELECT xCell,yCell,zCell FROM
newCell", -1,&stmt,0);
if(ret){
printf("error3: %g\n",ret);
}
for(int i = 0; i<5; i++)
{
sqlite3_step(stmt);
if(ret == SQLITE_ROW){
x = sqlite3_column_double(stmt,0);
y = sqlite3_column_double(stmt,1);
z = sqlite3_column_double(stmt,2);
printf("%g %g %g",x,y,z);
} else if(ret == SQLITE_DONE){
printf("Identifier");
break;
} else{
sqlite3_finalize(stmt);
printf("some error encountered\n");
break;
}
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}`
我执行了another stackoverflow answer,但没有得到预期的结果。我预期在表中插入值,然后遍历它们并打印xCell、yCell和zCell列。
1条答案
按热度按时间y3bcpkx11#
ret
不会在逐步执行期间更新,它仍会保留sqlite3_prepare_v2
的传回值。捕获
sqlite3_step
的返回值,如下所示。