2009-12-08 11 views
1

이것은 쉽게 이해할 수있는 질문입니다. 그러나 놀랍게도 여기에 답변을 찾지 못했습니다. 그래서 여기에 게시하고 있습니다. 나는 그것에서 부울 열을 포함하는 SQLite는 기반 데이터베이스를 상속 한Sqlite API 부울 액세스

는 다음과 같이 선언 :

이 표는 sqlite3를의 C API를 통해 액세스 할 수 있도록 노력하고있다
CREATE TABLE example (
    ex_col BOOLEAN NOT NULL DEFAULT 0, 
); 

는 지금 sqlite가 주어진 sqlite_column_* 함수를 호출 실제로 부울 유형을 지원하지 않습니다. 여기서 예상되는 동작은 무엇입니까?

이 나타납니다 sqlite_column_int() 항상 ... 0 또는 거짓, 나는 sqlite가 모든 열이 정말 텍스트 열 때문에이 가정

을 반환하고이를 유지하는 적절한 방법은 무엇입니까 - 다음 텍스트로 가져 오는 문자열은 true와 비교됩니까? 데이터베이스와 다른 모든 코드를 수정하고 싶지는 않습니다.

답변

1

하나의 분명한 방법은 정수 열로 "선언"한 다음 INSERT 또는 UPDATE 할 때 1 (True) 또는 0 (False)을 전달하는 것입니다. 이 방법으로 C 언어와의 호환성을 유지합니다. int로 선언 할 필요조차 없으며, 항상 정수를 삽입하면 괜찮을 것입니다.

당신은 상속 된 데이터베이스라고 언급했는데 이전에 어떻게 했습니까? 텍스트로 저장 한 경우 sqlite_column_text()을 호출 한 다음 "true"또는 "false"리터럴 문자열과 문자열을 일치시켜야 할 수 있습니다.

+0

이전에 C 코드에서 부울 열을 가져올 필요가 없었으므로 완료되지 않았습니다. 그들은 SQL stmts (ins, upd 등)에 대한 #define과 뷰 및 트리거의 전체 묶음이 있습니다 ... 기본적으로 값은 직접 읽거나 삽입하지 않습니다. : -/ – Petriborg

+0

하지만 분명히 어딘가에 값이 사용됩니까? 트리거가 열 값을 사용합니까? '# defined' 문은 어떨까요? 사용 된 적이 없다면 왜 그곳에 있습니까? ;-) –

+0

사용 예, 이렇게'#define SQL "UPDATE SET SET ex_col = 'true';"'그러면 stmt가 정상적으로 호출됩니다. SQL 코드는 똑같습니다. 그래서 모든 것을 문자열 (yum)로 처리하거나 열 유형을'Int'로 변경해야합니다. – Petriborg

1

실마리를 줄 수있는 데이터 요소가 있습니다.

SQLite Administrator tool은 부울을 "true"및 "false"문자열로 변환합니다.