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

SQLite Datenbank ausliefern

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Basti909851, 07.10.2010.

  1. Basti909851, 07.10.2010 #1
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Hallo liebe Community,

    ich finde mich gerade in die Android-Entwicklung ein. Ich habe natürlich schnell festgestellt, dass man kaum eine App ohne Speicherungsmöglichkeit schreiben kann. Ich möchte ein kleines Quiz programmieren, wo die App von Haus aus schon ein paar Fragen (sagen wir 100) mitliefert. - Also dachte ich mir, erstelle ich eine Datenbank mit diesen Fragen.

    Denke ich hier falsch, oder ist es wirklich nicht möglich diese Datenbank in der App mitzuliefern, sodass diese 100 Fragen direkt beim Programmstart abrufbar sind? Wenn doch, wie mache ich das denn? Ich möchte ja nicht, jedes Mal, wenn der User die App startet, die komplette Datenbank füllen müssen. - Denn so verstehe ich die Tutorials dazu, dass man die Datenbank nur über den Javacode füllen kann, aber bei mir soll die Datenbank ja eben schon komplett stehen...

    Ich hoffe jemand versteht mein Problem und kann mir helfen.



    Basti
     
  2. the_alien, 07.10.2010 #2
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Erstelle die Datenbank mit einem entsprechenden Tool und speicher sie in dem Assets Ordner in deinem Android Projekt.
     
  3. Basti909851, 07.10.2010 #3
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Wie genau mache ich das denn? Welches Tool empfiehlst Du da? Wie muss die Datei heißen? Welche Dateiendung soll sie haben?
     
  4. the_alien, 07.10.2010 #4
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Hier kriegst du eine Übersicht welche Tools es gibt: SQLite CVSTrac

    Dateiname und Endung sind egal. Kann Karl.Arsch heißen wenn du möchtest ;)
     
  5. Basti909851, 07.10.2010 #5
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Ah, okay. Die Dateiendung spielt also keine Rolle. Ich habe die jetzt mal quizgame.db genannt. Ich kann also in diese Datei direkt hintereinander weg die normalen SQL Befehle wegschreiben, ja? Also zuerst das CREATE-Statement und dann die ganzen INSERT INTOs? Und dies wird dann einmal beim allerersten PRogrammstart ausgeführt? Ich frage mich gerade, wie diese Datei selber aussehen muss.

    Ich will ja genau verhindern, dass sie bei jedem Programmstart ausgeführt wird... Vielleicht gehst Du mal in Deinen Erklärungen einen Level runter und erklärst mir mal das Grundsätzliche. Das wäre wirklich nett von Dir. *g* Jeder hat mal klein angefangen, ich bin noch bei klein. *g*
     
  6. gnometech, 07.10.2010 #6
    gnometech

    gnometech Android-Experte

    Beiträge:
    858
    Erhaltene Danke:
    122
    Registriert seit:
    20.10.2009
    so in etwa muss deine datei aussehen.
    dann musst du die eigentlich nurnoch auslesen und die einzelnen zeilen als sql befehl ausführen lassen.

    Code:
    DROP TABLE IF EXISTS "table";
    CREATE TABLE "tabe" ("_id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , "weitere spalten");
    INSERT INTO "table" VALUES(...);
    noch eine , wie ich finde nette möglichkeit.

    speicher die datei nicht im assets-folder sondern auf einem webserver wenn du hast. dann kannst du sie ändern ohne ein update der app zu machen.

    dann musst du dir halt noch einen algorithmus ausdenken, der beim start deiner app prüft, ob die datenbank schon existiert. wenn nein liest er sie ein.
     
  7. Basti909851, 07.10.2010 #7
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Super, also einfach das SQL in die Datei schreiben. Ich danke Dir! :)

    Das habe ich auch schon in Erwägung gezogen. Allerdings müssen wir ja so voraus setzen, dass der Benutzer der App bei jedem App-Start eine Internetverbindung hält, damit geprüft werden kann bzw. beim ersten Start die Datenbank überhaupt auf dem Handy erstellt werden kann.

    Klar, im Zeitalter der Smartphones hat so gut wie jeder eine Internetflat. Ich habe keine. Ist es denn wirklich schon so weit, dass man das voraussetzen kann?
     
  8. gnometech, 07.10.2010 #8
    gnometech

    gnometech Android-Experte

    Beiträge:
    858
    Erhaltene Danke:
    122
    Registriert seit:
    20.10.2009
    naja wenn du die app installierst, brauchst du internet. sonst kannst du sie ja auch nicht runterladen. und dann startet man sie doch meistens auch gleich oder?
    brauchst ja nur beim 1. start zwingend internet. danach überprüft er halt nur auf ne neue version, wenn ne verbindung da is.
     
  9. Basti909851, 07.10.2010 #9
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Das ist eine gute Idee. Ich werde das jetzt mal beides ausprobieren. So ein Algorithmus sollte ja jetzt nicht so schwer sein.
     
  10. Basti909851, 07.10.2010 #10
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Ich nochmal... Ich habe nun in den assets Ordner in meinem Eclipse-Projekt eine "quizGame.db" Datei erstellt und in meiner Datenbankklasse die Konstante DATABASE_NAME auch auf "quizGame.db" gesetzt. In der quizGame.db steht folgendes drin:

    Code:
    DROP TABLE IF EXISTS "questions";
    CREATE TABLE questions (
      questionid        INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      question_mark     TEXT,
      right_answer      TINYINT,
      answer1           TEXT,
      answer2           TEXT,
      answer3           TEXT,
      answer4           TEXT,
      difficulty_level  INTEGER
    );
    INSERT INTO "questions" VALUES("Frage1","1","Antwort1","Antwort2","Antwort3",Antwort4","1");
    Leider erhalte ich beim Auslesen aus der Tabelle (ich lese sie zu Testzwecken komplett aus) rein gar nichts. Weder Fehler noch Inhalt. - Es scheint also als wäre die Tabelle leer. Der Emulator zeigt nur das Layout, ohne Inhalt. - Mache ich etwas falsch?
     
  11. gnometech, 07.10.2010 #11
    gnometech

    gnometech Android-Experte

    Beiträge:
    858
    Erhaltene Danke:
    122
    Registriert seit:
    20.10.2009
    Code:
    DROP TABLE IF EXISTS "questions";
    CREATE TABLE "questions" (
      "questionid"        INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      "question_mark"     TEXT,
      "right_answer"      TINYINT,
      "answer1"           TEXT,
      "answer2"           TEXT,
      "answer3"          TEXT,
      "answer4"           TEXT,
      "difficulty_level"  INTEGER
    );
    INSERT INTO "questions" VALUES('Frage1',1,'Antwort1','Antwort2','Antwort3',Antwort4',1);
    probier es mal mit der formatierung. bei mir klappt das damit. sql is manchmal sehr empfindlich was " oder ' angeht.
    desweiteren glaub ich, das der primary key bei android immer _id sein muss? kann das wer anders bestätigen?
     
  12. Basti909851, 07.10.2010 #12
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Hm, also das klappt nicht. Ich referenziere z.Z. niergendwo auf den Asset Ordner. Ist das richtig? Also ich habe die Datei genau so genannt, wie ich die Konstante DATABASE_NAME gefüllt habe. Das reicht doch an und für sich, oder muss ich noch irgendwie auf die Datei selber zugreifen?

    Mit der ID hatte ich jetzt keine Probleme, wenn ich die Datenbank über Java fülle, so funktioniert meine Klasse und spuckt die Inhalte aus...
     
  13. the_alien, 07.10.2010 #13
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Eigentlich dachte ich, dass du dir die Datenbank selber dort speicherst und nicht die SQL Befehle dafür....
     
  14. Basti909851, 07.10.2010 #14
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Ah, das ist ein anderer Ansatz. Wie muss die Datei denn aussehen, damit ich "die Datenbank selber" dort speichern kann und wie wird das im Code angezeigt?
     
  15. the_alien, 07.10.2010 #15
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    sqlite ist ja ne einfache Dateidatenbank. Schnapp dir einen Manager, erstell eine neue DB, speicher die und schieb die Datei in Assets. Fertig.
    Öffnen kannst du die genau so wie die andere DB.
     
  16. Basti909851, 07.10.2010 #16
    Basti909851

    Basti909851 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    4
    Registriert seit:
    06.09.2010
    Hier muss ich nochmal nachfragen. Ich habe nun mit dem Programm, dass Du mir empfohlen hast, eine Datenbankdatei erstellt (quizGame.db). Diese habe ich in den Asset-Ordner geschobene. Wir greife ich im Code nun auf die Datenbank zu? Sprich, was gebe ich als Ziel an? Wenn ich jetzt nur bei DATABASE_NAME "quizGame.db" angebe, gibt er mir nichts aus - die Datenbank ist also leer.

    Gibt es da spezielle Zugriffsmethoden, um dann diese (von Hause aus mitgelieferte) Datenbankdatei zu verarbeiten?
     

Diese Seite empfehlen