1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

SQLite : Insert

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von RED-BARON, 07.01.2011.

  1. RED-BARON, 07.01.2011 #1
    RED-BARON

    RED-BARON Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    146
    Erhaltene Danke:
    19
    Registriert seit:
    06.10.2009
    Hallo Gemeinde, ich habe ein ??? ... Problem ! :smile:

    Die Tabelle enthält eine Spalte vom Typ C (10) - also char 10 zeichen breit

    Jetzt möchte ich die Zeichenfolge "001" in diese Spalte eintragen.

    insert into t1 (c10) values ('001')

    Beim auslesen der Tabelle enthält der Ergebnis-Cursor aber nur '1' :mad2:

    Der Fehler liegt nicht am Cursor ! Auch nicht an SQLite unter Android.

    Der Spaltenwert '1' wird mir auch vom "SQLite Control Center" so ausgegeben.

    Das gleiche Statement im "SQLite Control Center" erzeugt auch in der
    Spalte den Wert '1' !

    Frage ist nun, gibt es eine Option beim erstellen oder für SQLite selber,
    so eine Art "strict" ....

    Erstellt wurde die Tabelle mit

    Create Table t1 (c10 C(10))


    Vielen Dank fürs Lesen und evtl. Hilfestellungen zur Lösung des Problems !

    Schönes WE
     
  2. MetBo, 07.01.2011 #2
    MetBo

    MetBo Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Poste den Code, dann kann man das auch besser nachvollziehen.
     
  3. Zoopa, 07.01.2011 #3
    Zoopa

    Zoopa Android-Experte

    Beiträge:
    599
    Erhaltene Danke:
    173
    Registriert seit:
    28.07.2010
    Datatypes In SQLite Version 3

    Also den Typ C gibts nicht, sondern nur NULL, REAL, INTEGER, BLOB und TEXT. Also würde ich einfach TEXT nehmen.

    Andere Typen werden sogenannten Type Affinities zugeordnet und anhand dieser Affinities wiederum in einen der 5 oben genannten Typen konvertiert.

    Daher wird der Typ C(10) bei SQLite anhand der 5. Regel der 2.1 Determination Of Column Affinity als NUMERIC interpretiert und dann wohl zu INTEGER konvertiert. (Es steht zwar, dass es nur zu INTEGER konvertiert wird, falls das ganze ohne Verlust geschieht und wieder Rückgängig gemacht werden kann, aber vielleicht wird 001 als 1 angeschaut und daher zählt das nicht als Datenverlust?)

    Vielleicht liegt der Fehler auch einfach darin, dass du Cursor.getInt() statt Cursor.getString() verwendest?
     
    Zuletzt bearbeitet: 07.01.2011
  4. RED-BARON, 10.01.2011 #4
    RED-BARON

    RED-BARON Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    146
    Erhaltene Danke:
    19
    Registriert seit:
    06.10.2009
    @Zoopa,
    genau das könnte das Problem sein :smile: Als Workaround hab ich
    eben nun ein Leerzeichen an meine "001" gehängt. Bei einer Ab-
    Frage wird dann auch "001 "geliefert. ein Trim() restauriert den
    Wert wieder.

    Ich untersuche das ganze aber noch mal wenn mehr Zeit ist.

    Vielen Dank, RB
     
  5. muck, 10.01.2011 #5
    muck

    muck Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    7
    Registriert seit:
    07.11.2010
    Wahrscheinlich möchtest Du VARCHAR(10) verwenden, dann steht auch 001 drin. Allerdings kann man sich bei SQLite VARCHAR(x) sparen da sich die Datenbank nicht dran hält sondern das Feld der tatsächlichen länge des Inhaltes anpasst. Aus diesem Grund verwendet man üblicherweise TEXT und überläßt den Rest der Datenbank.
     

Diese Seite empfehlen