如果不使用回调,我只能在sqlite中获得前100个数据

tjvv9vkg  于 2023-01-09  发布在  SQLite
关注(0)|答案(1)|浏览(237)

我已经成功地从stackoverflow这里收集了代码,并设法创建了这个简单的代码。目标是列出数据行而不列出它们的列名。
不知怎么的,它工作了,但是它只打印前100行。剩下的4行没有打印。

#include <iostream>

#include <sqlite3.h>

sqlite3 *db;

int rc;

char *sql;

sqlite3_stmt *stmt;

int main()

{

    rc = sqlite3_open("PairToSqliteDB.db", &db);

    if (rc)

    {

        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

        return (0);

    }

    else

    {

        fprintf(stderr, "Opened database successfully\n");

    }

    sqlite3_prepare_v2(db, "select Item_id, ItemName, SellPrice from SARISARI", -1, &stmt, NULL);

    int c = 2;

    for (int i = 0; i < SQLITE_ROW; i++)

    {

        rc = (sqlite3_step(stmt)) == SQLITE_ROW;

        // %.2f = two decimals

        // %6.2f = six digit right align with two deci.

        // %-12s = twelve char left alignment

        if (i % c == 1)

            printf(" | ");

        printf("%3i: %-12s = P%6.2f", sqlite3_column_int(stmt, 0), sqlite3_column_text(stmt, 1), sqlite3_column_double(stmt, 2));

        if (i % c == 1)

            printf("\n");

    }

    sqlite3_close(db);

    return 0;

}

结果如下:'成功打开数据库
1:万宝路= P 8.00| 2:强大= P 7.00
3:更多= P 7.00| 4: Camel = P 6.00
5:姆尔博罗·帕克= 160.00比索|6:强力 Package = P130.00
7:更多白细胞= P130.00| 8:MrlboroPakRT = P145.00 '依此类推直到100,则其余项目不打印。

cgh8pdjw

cgh8pdjw1#

找到了解决方案,再次从某人谁张贴在这里stckoverflow,只是不记得谁张贴它。与一些操纵他的代码,我使它为我的目的工作。正如所建议的,我必须使用while循环。感谢他。
我的代码变更如下:
'sqlite3_stmt *stmt =空值; int rc = sqlite3_prepare_v2(数据库,“从SARISARI中选择项目标识,项目名称,销售价格”,-1,&stmt,空);如果(rc!= SQLITE_OK)返回rc;

const unsigned char *valChar;
const char *columnName;
double valDouble;
int valInt, type, colCount, colIndex;
int rowcount = -1;
int c = 2;
rc = sqlite3_step(stmt);
while (rc != SQLITE_DONE && rc != SQLITE_OK)
{
    colCount = sqlite3_column_count(stmt);
    for (colIndex = 0; colIndex < colCount; colIndex++)
    {
        rowcount++;
        type = sqlite3_column_type(stmt, colIndex);
        columnName = sqlite3_column_name(stmt, colIndex);
        if (type == SQLITE_INTEGER)
        {
            valInt = sqlite3_column_int(stmt, colIndex);
        }
        else if (type == SQLITE_FLOAT)
        {
            valDouble = sqlite3_column_double(stmt, colIndex);
        }
        else if (type == SQLITE_TEXT)
        {
            valChar = sqlite3_column_text(stmt, colIndex);
        }           
    }
    if (rowcount % c == 1)
        printf(" | ");
    printf("%3i: %-12s = P%6.2f", valInt, valChar, valDouble);
    if (rowcount % c == 1)
        printf("\n");
    rc = sqlite3_step(stmt);
}
rc = sqlite3_finalize(stmt);
return rc;

}`

相关问题