[sqlite] Sqlite3 데이터베이스에서 열 이름 목록을 얻는 방법은 무엇입니까?

iPhone 앱을 새로운 데이터베이스 버전으로 마이그레이션하고 싶습니다. 버전을 저장하지 않았으므로 특정 열 이름이 있는지 확인해야합니다.

Stackoverflow 항목 은 선택을 제안합니다.

SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'

결과를 구문 분석하십시오.

이것이 일반적인 방법입니까? 대안?



답변

PRAGMA table_info(table_name);

모든 열 이름의 목록을 얻을 수 있습니다.


답변

sqlite 데이터베이스가있는 경우 sqlite3 명령 행 프로그램 및 다음 명령을 사용하십시오.

데이터베이스의 모든 테이블을 나열하려면 다음을 수행하십시오.

.tables

지정된 스키마를 표시하려면 다음을 수행하십시오 tablename.

.schema tablename


답변

당신이 할 경우

.headers ON

원하는 결과를 얻을 수 있습니다.


답변

사람들이 어떻게 또는 무엇을 의미하는지 궁금한 나 같은 슈퍼 멍청한 놈

PRAGMA table_info('table_name') 

아래에 표시된대로이를 준비 명령문으로 사용하려고합니다. 이렇게하면 테이블과 관련된 값으로 채워진 것을 제외하고 이와 같은 테이블이 선택됩니다.

cid         name        type        notnull     dflt_value  pk
----------  ----------  ----------  ----------  ----------  ----------
0           id          integer     99                      1
1           name                    0                       0

여기서 id와 name은 열의 실제 이름입니다. 그 값을 얻으려면 다음을 사용하여 열 이름을 선택해야합니다.

//returns the name
sqlite3_column_text(stmt, 1);
//returns the type
sqlite3_column_text(stmt, 2);

현재 행의 열 이름을 반환합니다. 그들을 모두 잡거나 원하는 행을 찾으려면 모든 행을 반복해야합니다. 가장 간단한 방법은 다음과 같습니다.

//where rc is an int variable if wondering :/
rc = sqlite3_prepare_v2(dbPointer, "pragma table_info ('your table name goes here')", -1, &stmt, NULL);

if (rc==SQLITE_OK)
{
    //will continue to go down the rows (columns in your table) till there are no more
    while(sqlite3_step(stmt) == SQLITE_ROW)
    {
        sprintf(colName, "%s", sqlite3_column_text(stmt, 1));
        //do something with colName because it contains the column's name
    }
}


답변

쿼리 출력에 열 이름을 포함시키고 열로 올바르게 정렬하려면 다음 명령을 사용하십시오 sqlite3.

.headers on
.mode column

다음과 같이 출력됩니다.

sqlite> .headers on
sqlite> .mode column
sqlite> select * from mytable;
id          foo         bar
----------  ----------  ----------
1           val1        val2
2           val3        val4


답변

열 목록을 얻으려면 다음을 사용하면됩니다.

.schema tablename


답변

여기에 언급되지 않은 열 이름 목록을 얻는 다른 방법은 pragma 함수에서 선택하는 것입니다.

SELECT name FROM PRAGMA_TABLE_INFO('your_table');
name
tbl_name
rootpage
sql

다음을 실행하여 특정 열이 존재하는지 확인할 수 있습니다.

SELECT 1 FROM PRAGMA_TABLE_INFO('your_table') WHERE name='sql';
1

sqlite_master 또는 pragma table_info에서 select sql의 결과를 구문 분석하지 않으려는 경우 사용합니다.

참고:

https://www.sqlite.org/pragma.html#pragfunc