Nö, mir gehen keine Daten verloren. Ich mache dir mal kurz ein Aufstellung wie das jetzt funktioniert, vielleicht wird es dann deutlicher:
Die Datenbank enthält ein Feld Hash, das einen String speichern kann.
Jetzt werden die Daten per SQL Statement an die Datenbank geschickt, in Pseudocode:
Code: Alles auswählen
SqlExec( "INSERT INTO Tabelle Hash='" + FileInfo.GetHash +';");
Also landen die Daten in dieser Darstellung bei der Datenbank und werden so auch in dieser Darstellung gespeichert.
Zurückgeholt werden die Daten mit dieser Funktion:
Code: Alles auswählen
template<class T> T Dataholding::ConvertSqlStringToDatatype(
std::string SqlValue )
{
T Returning;
std::stringstream translateString;
translateString << SqlValue;
translateString >> Returning;
return Returning;
}
Dem Template übergebe ich den Zieltyp und ich bekomme exakt die gleiche Zahl zurück. Im Moment gehen alle Daten als String in die Datenbank und es kommen auch alle als String wieder zurück, also muss ich die Konvertierung sowieso machen. Die einzige andere Möglichkeit wäre es für jede Datenbank mit ihren individuellen Spalten einen spezialisierten Wrapper zu schreiben. Ich speichere hier ja nicht nur die paar grundlegenden Datentypen die Sqlite unterstützt sondern auch eigene Datentypen.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!