1

これは私のコードです:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>

#define DBFILE "./userinfo.db" //It's empty file

int main(int argc, char *argv[])
{
    int retval;
    sqlite3_stmt *stmt;
    sqlite3 *handle;

    retval = sqlite3_open(DBFILE, &handle);
    if(retval)
    {
        perror("sqlite3_open");
        exit(-1);
    }
    printf("Connection successful...\n");
    char create_table[] = "CREATE TABLE IF NOT EXISTS"
    "users(uname TEXT PRIMARY KEY, pass TEXT NOT NULL)";

    retval = sqlite3_exec(handle, create_table, 0, 0, 0);
    if (retval)
    {
        perror("sqlite3_exec");
        exit(-1);
    }
    sqlite3_close(handle);
    return 0;
}

私はそれをコンパイルし、エラーなしで実行しました。

実行する前は、データベース ファイルuserinfo.dbは空のファイルです

実行した後、empty database file再び取得しました。

なんで?テーブルが保存されませんでしたか?

4

1 に答える 1

2

私は得る:

$ testprogram
Connection successful...
sqlite3_exec: No such file or directory

または、ファイルが既に存在する場合:

$ testprogram
Connection successful...
sqlite3_exec: Success

その理由は、sqlite3_*関数が設定されていないためです。errnoこれは、によって出力されるエラー コードperrorです。

SQLite エラー メッセージを出力するには、次を使用しますsqlite3_errmsg

fprintf(stderr, "sqlite3_exec: %s\n", sqlite3_errmsg(handle));

それで、私は得る:

$ testprogram
Connection successful...
sqlite3_exec: near "EXISTSusers": syntax error
于 2012-10-17T08:59:24.147 に答える