如何在C中从sqlite表中获取数据?

iyfamqjs  于 2022-11-30  发布在  SQLite
关注(0)|答案(1)|浏览(154)

我正在尝试使用C创建一个数据库。我创建了一个名为newCell的表,并向其中插入了一些值。现在,我希望遍历所有行,并从每行6列中的3列获取值。我一直在尝试执行类似于thisthis 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列。

y3bcpkx1

y3bcpkx11#

ret不会在逐步执行期间更新,它仍会保留sqlite3_prepare_v2的传回值。

for(int i = 0; i<5; i++)
{
    sqlite3_step(stmt);

    if(ret == SQLITE_ROW){

捕获sqlite3_step的返回值,如下所示。

for(int i = 0; i<5; i++)
{
    ret = sqlite3_step(stmt);

    if(ret == SQLITE_ROW){

相关问题