SQLite: Abfrage ob Tabelle existiert



  • Wie kann ich in SQLite am besten abfragen ob eine Tabelle existiert, auch wenn diese keine Datensätze hat?
    Ich kenne "CREATE IF NOT EXISTS", aber ich möchte das Statement komplett einsparen wenn eine Tabelle bereits existiert.



  • Es gibt ne magische Tabelle sqlite_master.
    2 Felder sind da für dich wichtig: name und type.
    type="table" und name ist dann dein tabellen name.

    bzw. sqlite_temp_master oder sqlite_temporary_master (siehe Doku, ich weiss jetzt nicht was von beiden) ist für temporaere Objekte.



  • Hm, vorher hats irgendwie nicht funktioniert, aber so gehts:

    bool NLDatabase::tableExists(const std::string& name)
    {
    	std::stringstream sql;
    	sql << "SELECT COUNT(type) FROM sqlite_master WHERE type='table' AND name='" << name << "';";
    	NLSQLStatement* r = createStatement(sql.str());
    	r->step();
    	int val = r->getColumnInt(0);
    	delete r;
    	return val >= 1;
    }
    

    Thx :).


Anmelden zum Antworten