Datenbankabfragen sinnvoll erstellen
-
Hallo zusammen.
Momentan schreibe ich ein kleines Tool, welches in bestimmten Fällen Abfragen zu einer Datenbank ausführt. Das ganze funktioniert auch alles reibungslos. Allerdings missfällt mir die Art und Weise, wie ich die Abfragen zusammenbaue. Ich habe das Gefühl, dass ich es mir vielleicht unnötig schwer mache, oder das Problem zu umständlich und unperformant löse.
Damit ihr versteht was ich meine, hier ein Beispiel. Ich gehe immer nach dem gleichen Schema vor:
std::string query; query = query + "UPDATE `unknown_project`.`" + table + "` SET `" + change + "`='" + set + "' WHERE `" + column+ "`= ?;";
oder hier der Zusammenbau eines Fehlers:
std::string error; error = "Query: " + query + "# MYSQL-ERR: " + e.what() + " (MySQL error code: " + std::to_string(e.getErrorCode()) + ", SQLState: " + e.getSQLState() + " )";
Gibt es einen besseren Weg oder ist so etwas gängige Praxis? Ich hatte auch überlegt ob es schlauer wäre einen std::stringstream zu verwenden.
-
@Zhavok Mir fällt spontan sqlpp11 von Roland Bock dazu ein. Schau mal hier https://github.com/rbock/sqlpp11 und https://www.youtube.com/watch?v=cJPAjhBm-HQ
-
Vielen Dank. Das schaue ich mir mal in Ruhe durch. Sieht ganz interessant aus. Wollte sowieso schauen welche Möglichkeiten es zum koppeln mit Datenbanken.
Mir geht es allerdings hier eher weniger um den Datenbankaspekt, sondern viel mehr darum, ob es Schlau ist wie in meinen Beispielen Strings zusammen zu bauen.
-
Also mit + + + + würd ich das auch nicht machen. Eher ostringstream und variadic template auf die Art:
anniversary = query("select {0} from {1} where {2} = {3};", "Name", "Mitarbeiter", "Jahre", 20 );
-
Ah, vielleicht kannst du auch gleich fmt https://github.com/fmtlib/fmt nutzen.