0

私はsqliteデータベースの初心者です。FIREWALL_TABLE_LIST という名前のテーブルがあり、そこから CAN_MESSAGE_ID 値を抽出し、c プログラムで宣言された変数である message_ID に格納します。ヘルプや提案はありますか?.

#ifdef TEST_VECTORS
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
 int i;
for(i=0; i<argc; i++){
  printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
 }

int main(int argc, char* argv[])
{
    /* INITIALIZATION */
    int message_ID = 0;

    /* INITIALIZATION for database*/
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;
    char *sql;
    const char* data = "Callback function called";

    /* Open database */
    rc = sqlite3_open("rt.db", &db);
    if( rc ){
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        exit(0);
    }else{
        fprintf(stderr, "\nOpened database successfully\n\n");
    }   

    /* Create SQL statement */
    sql = "SELECT * from FIREWALL_TABLE_LIST WHERE DATE_TIME = (SELECT MAX(DATE_TIME) FROM FIREWALL_TABLE_LIST)";
    /* Execute SQL statement */
    rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
    if( rc != SQLITE_OK ){
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }else{
        fprintf(stdout, "Operation done successfully\n\n");
    }

    sqlite3_close(db);
    fprintf(stderr, "Closed database successfully\n\n");
    return 0;
}
#endif /* TEST_VECTORS */
4

1 に答える 1

0

SELECT *データベース スキーマが変更されるたびに列の順序と数が変わるため、使用しないでください。を使用するだけSELECT CAN_MESSAGE_ID ...です。

コールバックは一連のsqlite3_exec文字列を受け取るため、値を数値に戻す必要があります。

message_ID = atoi(argv[0]);
于 2013-08-14T09:44:03.213 に答える