2010-08-17 4 views
7

데이터베이스 파일을 열어 잠재적으로 존재하지 않는 파일을 만들 수 있습니다.sqlite3 C++ API에 테이블이 있는지 어떻게 확인합니까?

하지만 어떤 이유로 테이블을 만들지 않습니다. 어떤 아이디어?

const char* sql = "CREATE TABLE IF NOT EXISTS blocks(id text primary_key,length numeric)"; 

sqlite3_stmt *stmt; 
rc = sqlite3_prepare_v2(db_, create_table_sql, -1, &stmt, NULL); 
rc = sqlite3_step(stmt); 

나는 여기에 있음을 알지 못했지만 각 지점에서 반환 코드를 확인하고 있습니다. 오류가 없습니다.

아마도 이것을 수행하는 더 좋은 방법이 있을까요?

+1

와우, 지역화 된 것으로 생각하십니까? 놀랍게도 5k 이상의 명성을 가진 사람들과 5 개의 답변을 받았습니다. 어쨌든 .... – Matt

답변

9

변화 :

select count(type) from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK'; 

가 0이, 실행하는 경우, 1 존재하지 않는 테이블 반환합니다.

2

SQL에 오른쪽 괄호가 누락 된 것처럼 보입니다. 다음과 같아야합니다.

const char* sql = "CREATE TABLE IF NOT EXISTS blocks(id text primary_key,length numeric);"; 
+0

죄송합니다. 위의 예는 제가 일하는 사람을 숨기기위한 실제와 약간 다릅니다. 실제 코드에서는 create table이 여전히 작동하지 않습니다. – Matt

0

내 질문에 답하십시오.

위의 코드에는 실제로 반영되지 않았습니다. 그것은 실제로 모두 함께 일하고있었습니다. 하지만 데이터베이스에 오타가 있습니다. 따라서 명령 줄 sqlite3 도구를 사용하여 검사했을 때 테이블이나 예상되는 데이터가 포함되어 있지 않았습니다.

그러나 테이블이 있는지 여부를 테스트 할 수있는 기능이 있는지 궁금합니다. 당신이 행이 다음 테이블이 존재 얻을 경우

select 1 from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK' 

:

5

는 다음 SQL을 실행합니다. 결과 집합이 비어 있으면 결과 집합이 비어 있습니다. 지정된 다른 대답에

관련 문제