특정 사용자 테이블이 있는지 SQLite에서 확실하게 체크인 하는 방법은 무엇입니까?
테이블의 “select *”가 오류를 반환했는지 여부를 확인하는 것과 같은 신뢰할 수없는 방법을 요구하지 않습니다 (이것은 좋은 생각입니까?).
이유는 다음과 같습니다.
내 프로그램에서 일부 테이블이 존재하지 않으면 테이블을 작성하고 채워야합니다.
이미 존재하는 경우 일부 테이블을 업데이트해야합니다.
문제의 테이블이 이미 생성되었다는 신호를 보내려면 다른 경로를 사용해야합니까?
아니면 내 접근 방식이 의미가 있습니까?
답변
나는 그 FAQ 항목을 놓쳤다.
어쨌든 나중에 참조 할 수 있도록 전체 쿼리는 다음과 같습니다.
SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';
{table_name}
확인할 테이블 이름은 어디에 있습니까 ?
참조를위한 설명서 섹션 : 데이터베이스 파일 형식. 2.6. SQL 데이터베이스 스키마의 저장
- 지정된 이름의 테이블 목록이 반환됩니다. 즉, 커서는 0의 카운트 (존재하지 않음) 또는 1의 카운트 (존재 함)를 갖습니다.
답변
SQLite 버전 3.3 이상을 사용하는 경우 다음을 사용하여 테이블을 쉽게 만들 수 있습니다.
create table if not exists TableName (col1 typ1, ..., colN typN)
같은 방법으로 다음을 사용하여 테이블이 존재하는 경우에만 테이블을 제거 할 수 있습니다.
drop table if exists TableName
답변
변형은 SELECT NAME 대신 SELECT COUNT (*)를 사용하는 것입니다.
SELECT count(*) FROM sqlite_master WHERE type='table' AND name='table_name';
테이블이 존재하지 않으면 0을, 존재하면 1을 리턴합니다. 수치 결과가 더 빠르고 쉽게 처리되므로 프로그래밍에 유용 할 것입니다. 다음은 SQLiteDatabase, Cursor, rawQuery를 매개 변수와 함께 사용하여 Android에서이를 수행하는 방법을 보여줍니다.
boolean tableExists(SQLiteDatabase db, String tableName)
{
if (tableName == null || db == null || !db.isOpen())
{
return false;
}
Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?", new String[] {"table", tableName});
if (!cursor.moveToFirst())
{
cursor.close();
return false;
}
int count = cursor.getInt(0);
cursor.close();
return count > 0;
}
답변
시도해 볼 수 있습니다 :
SELECT name FROM sqlite_master WHERE name='table_name'
답변
사용하다:
PRAGMA table_info(your_table_name)
결과 테이블이 비어 있으면 your_table_name
존재하지 않습니다.
선적 서류 비치:
PRAGMA schema.table_info (테이블 이름);
이 pragma는 명명 된 테이블의 각 열에 대해 하나의 행을 반환합니다. 결과 집합의 열에는 열 이름, 데이터 형식, 열이 NULL 일 수 있는지 여부 및 열의 기본값이 포함됩니다. 기본 키의 일부가 아닌 열의 경우 결과 집합의 “pk”열이 0이고 기본 키의 일부인 열의 기본 키 열의 인덱스입니다.
table_info pragma에 명명 된 테이블도 뷰가 될 수 있습니다.
출력 예 :
cid|name|type|notnull|dflt_value|pk
0|id|INTEGER|0||1
1|json|JSON|0||0
2|name|TEXT|0||0
답변
SQLite 테이블 이름은 대소 문자를 구분하지 않지만 비교는 기본적으로 대소 문자를 구분합니다. 모든 경우에이 작업을 제대로 수행하려면 추가해야합니다 COLLATE NOCASE
.
SELECT name FROM sqlite_master WHERE type='table' AND name='table_name' COLLATE NOCASE
답변
“테이블이 이미 존재합니다”오류가 발생하면 다음과 같이 SQL 문자열을 변경하십시오.
CREATE table IF NOT EXISTS table_name (para1,para2);
이런 식으로 예외를 피할 수 있습니다.