没有从SQlite表中提取任何内容?

时间:2009-03-30 18:40:19

标签: sql c sqlite

void max_min(sqlite3 *db)
{
    //call back*********
    int i, ncols;
    sqlite3_stmt *stmt;
    char *sql;
    const char *tail;
    char *zErrMsg = 0;
    int rc;
    //******************

    //min/max variables
    char min[20];
    char max[20];




    //we want only the min and max value of this table
    sql = "SELECT MIN(Start),MAX(End)FROM GMTI;"; //doesn't extract but works in GUI tool?

    //sql = "SELECT * FROM GMTI WHERE Start<16;"; //works?

    rc = sqlite3_prepare(db, sql, strlen(sql), &stmt, &tail);
        if(rc != SQLITE_OK){
            fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db));
        }

    rc = sqlite3_step(stmt);
    ncols = sqlite3_column_count(stmt);
    printf("Number of columns: %d and row status: %d", ncols, rc);
    while(rc == SQLITE_ROW){
        for(i=0; i<ncols; i++){
                  if (strncmp("Start", sqlite3_column_name(stmt,i), strlen("Start")) == 0)
                  {
                        strncpy(min, sqlite3_column_text(stmt,i), strlen(sqlite3_column_text(stmt,i)));
                        strcpy(min + strlen(sqlite3_column_text(stmt,i)), "\0");
                        printf("min is: %s\n", min);
                        printf("<br>");
                  }  
                  if (strncmp("End", sqlite3_column_name(stmt,i), strlen("End")) == 0)
                  {
                        strncpy(max, sqlite3_column_text(stmt,i), strlen(sqlite3_column_text(stmt,i)));
                        strcpy(max + strlen(sqlite3_column_text(stmt,i)), "\0");
                        printf("max: %s\n", max);
                        printf("<br>");
                  }


         }//end for 

        fprintf(stderr, "\n");
    rc = sqlite3_step(stmt);
    }//end while

    sqlite3_finalize(stmt);

}

当我使用上面的SQL查询和MIN和MAX函数时,没有任何内容打印出最小值和最大值。如果我使用其中一个注释掉的其他语句,它会按预期工作,打印所选查询 查询中的max和min有什么不同,它无法提取值?它不是表格式吗?
另外,我在同一个数据库的SqLite数据库浏览器中测试了问题查询字符串并且它工作正常,显示了两个最小值和最大值。

任何建议都将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:2)

尝试打印出返回的列名称。也许它们不像你想象的那样等于“开始”和“结束”?

答案 1 :(得分:0)

也许你应该在MAX(End)和FROM之间添加一个空格?