2012-10-17 5 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는 [] ="NOT이있는 경우 테이블 만들기 "(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_* 기능은 에러 코드 출력이 perror입니다 errno을 설정하지 않는다는 것입니다 . 출력 SQLite는 오류 메시지를

, sqlite3_errmsg를 사용 : 그와

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

를, 내가 얻을 : "사용자

$ testprogram 
Connection successful... 
sqlite3_exec: near "EXISTSusers": syntax error