2010-08-17 6 views
7

J'ouvre un fichier de base de données et le crée potentiellement s'il n'existe pas.Comment vérifier si une table existe dans sqlite3 C++ API?

Mais pour une raison quelconque, cela ne crée pas la table. Des idées?

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); 

Je ne l'ai pas ici par oui, je vérifie le code de retour à chaque point. Il n'y a aucune erreur.

Peut-être qu'il existe une meilleure façon d'accomplir cela?

+1

Wow, vous considérez cela comme localisé? donné 5 réponses avec des personnes ayant une réputation supérieure à 5k c'est surprenant. De toute façon .... – Matt

Répondre

9

Variation sur une autre réponse donnée:

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

sera de retour 0 est table n'existe pas, 1 si elle le fait.

2

Il semble qu'il vous manque une parenthèse droite dans le SQL. Il devrait être:

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

Désolé, l'exemple ci-dessus est légèrement différent de l'actuel pour cacher pour qui je travaille. Dans le code actuel, la table create ne fonctionne pas encore. – Matt

0

Répondre à ma propre question.

Ce n'est pas réellement reflété dans le code ci-dessus. Cela fonctionnait réellement tout le long. Mais j'ai eu une faute de frappe sur la base de données que j'utilisais. Par conséquent, lorsque je l'ai examiné avec l'outil de ligne de commande sqlite3, il ne contenait pas la table ou l'une des données attendues.

Cependant, je suis curieux de savoir s'il existe une fonction qui me permettra de tester si une table existe ou non.

5

Exécutez l'instruction SQL suivante:

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

Si vous obtenez une ligne alors la table existe. Si le résultat est vide, ce n'est pas le cas.

Questions connexes