SQLite DB mit MySQL synchronisieren funktioniert nicht.

  • Hallo zusammen,


    also ich habe folgendes Problem:
    Ich möchte meine mySQL DB mit einer lokalen SQLite DB synchronisieren.
    Dazu leere ich die SQLite Tabelle und will in einer for-Schleife die Daten aus der MySQL DB auslesen und dann Objekt für Objekt in die SQLite DB schreiben.
    Das leeren funktioniert und das einfügen eigentlich auch, allerdings sagen meine LogCat Ausgaben etwas anderes.
    Hier mal meine Funktionen.
    In der Activity sieht das Ganze so aus:



    Das ist also eine ASyncTask, die solange einen ProgressDialog anzeigt, bis das Synchronisieren fertig ist.
    Hier wird die Funktion access.syncGames(ScheduleActivity.this) aufgerufen. Die sieht wie folgt aus:



    Hier wird als erstes mit

    Code
    sqLiteAccess.clearGameTable(context)

    die SQLite Tabelle geleert. Dann wird in der for-Schleife nach und nach mit

    Code
    sqLiteAccess.insertGame(homeTeam, guestTeam, place, referee, gameDate, time, context)

    die Spiele in die SQLite DB eingefügt.
    Diese beiden Funktionen bestehen wieder aus AsyncTasks die wie folgt aussehen:



    und



    Die Funktionen die dahinter liegen sind:


    Java
    public void clearGameTable()
    	{
    		gameDataBase.execSQL("DELETE FROM '"+phpFileName+"'");
    		gameDataBase.execSQL("VACUUM");	
    	}


    und



    Also mein Problem ist nun folgendes: LogCat sagt mir:


    1. clearGameTable funktioniert
    2. sqlite returned: error code = 17, msg = statement aborts at 14: [SELECT VALUE FROM SETTINGS WHERE SETTING = 'team'] database schema has changed
    3. insertGameTable funktioniert nicht!


    Dieses Setting holt mir einfach nur den Datanbank Präfix aus der SQLite DB.
    Wie gesagt das Ganze funktioniert eigentlich, aber der LogCat sagt halt was anderes.
    Jemand eine Idee was das bedeuten könnte? Ich hoffe das war nicht zuviel Code auf einmal, aber ich habe ewig bei Google gesucht und alles ausprobiert und Ihr seid (hoffentlich) meine letzte Rettung!!
    Besten Dank schonmal!


    Gruß


    M3doXX

  • Hi


    googelt man ein wenig behaupten viele das wäre ein false error. Ich denke aber im laufe des Testens hast du mal das Schema verändert, etwas umgestellt, die App neu aufgespielt und er hat aber das alte .sqlite File behalten, das jetzt etwas "korrupt" ist. Versuch mal deinen Cache zu leeren, dann deinstallieren und die App neu aufzuspielen. Dann müsstest du ein schönes, frisches, leeres File haben. Evtl. vorher auch mal in Eclipse(?) ein Project > Clean drüber rödeln lassen.


    Wenns nichts bringt und an sonsten alles funktioniert kann man den error wohl ignorieren.


    Gruß,
    matze

  • Hi matthias,


    ich habe den alles mal auf null gesetzt (Cache leeren, clean, Neuinstallation) und der Fehler besteht immer noch.
    Es ist ja nicht nur das er mir diesen Fehler ausgibt, sondern auch "InsertGame funktioniert nicht" an dieser Stelle:



    Er müsste doch eigentlich "InsertGame funktioniert" ausgeben, da die Variable "res" nach der DB-Abfrage auf true gesetzt wird?!
    Soll ich das wirklich einfach ignorieren? Irgendwie kann ich mich damit nicht zufriedengeben.
    Gruß


    M3doXX

  • Hi,


    joa, einen Error ignorieren ist schon nicht wirklich toll. Aber falls das wirklich ein false positive ist, also ein Bug, kann man nichts tun ausser das ganze mit einem dicken fetten TODO zu versehen und nach updates mal prüfen ob der Fehler in späteren Android Versionen immer noch existiert ...
    Zumindest was der LogCat sagt gibt nicht mehr her als Erklärung.


    Ich gehe mal davon aus du hast deine App schon umfassend debuggt und schritt für schritt nachvollzogen was der da treibt? Vll. auch mal das .sqlite File auf den PC ziehen und mit einem SQLite Programm öffnen und die SQL dort ausführen. Mal schaun was er da sagt. Hab das mal mit nem Firefox Plugin namens SQLite Manager gemacht. Vll. ist ja die Fehlermeldung einfach nur verdammt ungünstig und es scheitert an was ganz anderem ...


    Gruß,
    Matze

  • Hi,


    ich habe gestern mal das mit den Settings rausgenommen und dann kriege ich die gleiche Fehlermeldung mit einem anderem SQL-Statement:


    Code
    sqlite returned: error code = 17, msg = statement aborts at 17: [INSERT INTO TEST_GAME(DATE, TIME, PLACE, REFEREE, HOME, GUEST) VALUES(?, ?, ?, ?, ?, ?);] database schema has changed


    Kann das vielleicht irgendwie damit zusammenhängen, das sich die Instanzen überlagern, bzw das das Ganze nicht wirklich synchron läuft?
    Aber ich mache das ja mit ASync-Tasks also sollte es doch eigentlich rund laufen oder? Ich habe übrigens gerade festgestellt, dass die Funktion nicht immer richtig funktioniert! Ab und zu synchronisiert er nicht alle Objekte oder manche doppelt!? Also liegt doch was im Argen..
    Komplett debuggt habe ich das Ganze noch nicht. Werde ich heute Abend mal ausprobieren, hab gestern inner Uni gelernt wie das geht :D
    Nur ich hab kein Plan wo ?! Ouh man das is echt zum ko**** hier :D
    Gruß


    M3doXX

  • Hoi,


    na da scheinst du ja ein grundsätzliches Threading- Problemchen zu haben ... weiß grad nicht wo ich da jetzt ansetzen soll. Am trivialsten wärs wohl mal zu testen ob du deine Variablen einfach auf synchronized setzen kannst oder ob du Methoden synchronized setzen kannst.
    Ich meine mich zu erinnern dass FindBugs auch DeadLocks etc. erkennt, zumindest bis zu einem gewissen grad. Falls du also nicht so recht weist wo du jetzt ansetzen sollst, kannst du mal FindBugs drüber rödeln lassen, vll. hat der ja einen passenden Tipp.


    Gruß,
    matze

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!