Was ist das für eine Zahlendarstellung?

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Was ist das für eine Zahlendarstellung?

Beitrag von fat-lobyte » Mo Jan 09, 2012 12:14 pm

Blöde Frage, wieso nicht einfach als INTEGER mit 8 bytes?
http://www.sqlite.org/datatype3.html hat geschrieben:Each value stored in an SQLite database (or manipulated by the database engine) has one of the following storage classes:

NULL. The value is a NULL value.

INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.

REAL. The value is a floating point value, stored as an 8-byte IEEE floating point number.

TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16LE).

BLOB. The value is a blob of data, stored exactly as it was input.
Ja, aber diese Problem umgehe ich, indem ich die Darstellung als String speichere.
Vielleicht missverstehe ich dich, aber das klingt nicht richtig. Die Darstellung bleibt zwar erhalten, schön und gut. Aber um den Wert in die Darstellung zu bringen musst du konvertieren (es sei denn, du verwendest reine Integerdarstellung). Bei dieser konvertierung gehen Daten verloren, das heißt wenn du es wieder zurückkonvertierst ist der Ausganswert nicht gleich dem Eingangswert.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Bebu » Mo Jan 09, 2012 1:00 pm

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!

Antworten