Проверьте, действительно ли CREATE TABLE создает таблицу или она уже существует? - PullRequest
3 голосов
/ 19 марта 2012

Я создаю таблицу в SQLite, не проверяя каждый раз, существует ли она.

sqlite3_stmt* create_stmt = NULL;
if (sqlite3_prepare_v2(db, "CREATE TABLE mytable (sif INTEGER PRIMARY KEY, name VARCHAR, description VARCHAR);", -1, &create_stmt, NULL) == SQLITE_OK)
{
    sqlite3_step(create_stmt);
    sqlite3_finalize(create_stmt);
}

Если таблица не существует, она будет создана; если он существует, ничего не происходит.

Я хотел бы знать, есть ли какой-нибудь способ получить информацию, создана ли таблица или только что проверена?

Ответы [ 3 ]

3 голосов
/ 04 ноября 2012

Я не уверен, что вы все еще ищете ответ, но если таблица уже существует, то sqlite3_finalize возвращает ненулевое (не SQLITE_OK) значение.

2 голосов
/ 19 марта 2012

В sqlite3: .schema TABLENAME есть эквивалент describe table mysql. См. этот вопрос для получения дополнительной информации о нем.

Таким образом, вы можете выдать .schema mytable, чтобы узнать, был ли он создан и как он выглядит. Чтобы сосредоточиться на одной таблице, вы можете также использовать это утверждение:

select count(type) from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK';
1 голос
/ 19 марта 2012

Если я правильно помню, в случае, если ваша таблица уже существует, это будет sqlite3_step (), который не работает, а не sqlite3_prepare_v2. Проверьте результат для этого тоже.
Редактировать: Кроме того, вы должны все равно проверять это, чтобы поймать поврежденные базы данных или другие условия ошибки;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...