2012-10-17 29 views
1

這是我的代碼:創建以C sqlite3的表,但有一個空數據庫文件

#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

爲什麼?桌子沒有被保存?

+0

'炭CREATE_TABLE [] = 「CREATE TABLE IF NOT EXISTS」 「用戶(UNAME TEXT PRIMARY KEY,傳遞TEXT NOT NULL)「;'這不應該只是一個字符串嗎? –

+2

你需要EXISTS和用戶之間的空間,但不知道爲什麼沒有錯誤。 – ergosys

+1

@IonutHulub兩個字符串文字之間只有空格會自動連接爲單個字符串文字。 –

回答

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 
相關問題