SQLite Befehle...selbe Bedeutung???

  • Antworten:4
Christian Auner
  • Forum-Beiträge: 18

09.06.2015, 19:09:13 via Website

Hallo Leute,

habe eine Frage zu SQLite ;)

müssten diese beiden Befehle das selbe Ergebnis liefern?
Es handelt sich um eine n:m Tabelle wo Tags--> ID: IDT und Übungen --> ID: IDU in Verbindung stehen.

cursor = db.rawQuery("SELECT "+IDT+" FROM " + TABLE_Name + " WHERE " + IDU + "=?", new String[] {String.valueOf(id)});

and

cursor = db.rawQuery("SELECT "+IDT+" FROM " + TABLE_Name + " WHERE " + IDU + "="+id, null);

Grüße und Danke
Chris

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.06.2015, 19:34:04 via Website

Müssten ja, ob sie es tun ist die Frage, da du beim 2. statt einen leeen String Array einfach null übergibst.

Was ist denn der Fehler?
Vlt. kann man dann gezielter helfen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Christian Auner
  • Forum-Beiträge: 18

10.06.2015, 12:37:20 via Website

Hallo,
ja ich habe eine größeren Fehler und deshalb suche ich gerdae ;)

Der Fehler;

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fitness.christian.fitness/com.fitness.christian.fitness.atcitivities.ListViewActivity}: android.database.sqlite.SQLiteException: near "EXIST": syntax error (code 1): , while compiling: DROP TABLE IF EXIST ueb

Hier der Code;

public class DatabaseHelper extends SQLiteOpenHelper {

private static DatabaseHelper sInstance;

public final ArrayList<Uebung> uebList = new ArrayList<>();
public final ArrayList<Tag> tagList = new ArrayList<>();

private static final int DATABASE_VERSION = 2;
private static final String DATABASE_NAME= "fitnessHelper";

//Tabelle Übungen "ueb"
private static final String TABLE_UEB = "ueb",
                            UEB_ID = "idU",
                            UEB_TITEL = "titel",
                            UEB_BESCHREIBUNG = "beschreibung",
                            UEB_URL_MAIN = "urlMain",
                            UEB_URL_SEC = "urlSec",
                            UEB_URL_DETAIL = "urlDetail";

//Tabelle Übungen + Tag "ueb_tag"
private static final String TABLE_UEB_TAG = "ueb_tag",
                            UEB_TAG_IDU = "idU_ueb",
                            UEB_TAG_IDT = "idT_tag";

//Tabelle Tag "tag"
private static final String TABLE_TAG = "tag",
                            TAG_ID = "idT",
                            TAG_TITEL = "titel";

//Tabelle Übungen + Plan "ueb_plan"
private static final String TABLE_UEB_PLAN = "ueb_plan",
                            UEB_PLAN_IDU = "idU_ueb",
                            UEB_PLAN_IDP = "idP_plan",
                            UEB_PLAN_SATZ = "satz",
                            UEB_PLAN_WDH = "wdh",
                            UEB_PLAN_KG = "kg";

//Tabelle Plan "plan"
private static final String TABLE_PLAN = "plan",
                            PLAN_ID = "idP",
                            PLAN_TITEL = "titel";

public DatabaseHelper(Context context){
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

public static synchronized DatabaseHelper getInstance(Context context){

    if (sInstance == null) {
        sInstance = new DatabaseHelper(context);
    }
    return sInstance;
}

@Override
public void onCreate(SQLiteDatabase db) {
    //Datenbank für ForeinKey freigeben
    Log.d("Datenbankzugriff: ", "jetzt");
    db.execSQL("PRAGMA foreign_keys = ON;");

    db.execSQL("CREATE TABLE "+TABLE_UEB+"("+ UEB_ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"+ UEB_TITEL +" TEXT,"+ UEB_BESCHREIBUNG +" TEXT,"+ UEB_URL_MAIN +" TEXT,"+ UEB_URL_SEC +
             " TEXT,"+ UEB_URL_DETAIL +" TEXT)");

    db.execSQL("CREATE TABLE "+TABLE_TAG+"("+ TAG_ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"+ TAG_TITEL +" TEXT)");
    db.execSQL("CREATE TABLE "+TABLE_PLAN+"("+ PLAN_ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"+ PLAN_TITEL +" TEXT)");

    db.execSQL("CREATE TABLE "+TABLE_UEB_TAG+"("+ UEB_TAG_IDU +" INTEGER, "+ UEB_TAG_IDT +" INTEGER, FOREIGN KEY("+UEB_TAG_IDU+") REFERENCES "+TABLE_UEB+"("+UEB_ID+") ON DELETE CASCADE,"+
            "FOREIGN KEY("+UEB_TAG_IDT+") REFERENCES "+TABLE_TAG+"("+TAG_ID+")"+" ON DELETE CASCADE");

    db.execSQL("CREATE TABLE "+TABLE_UEB_PLAN+"("+ UEB_PLAN_IDU +" INTEGER,"+ UEB_PLAN_IDP +" INTEGER,"+ UEB_PLAN_SATZ +" INTEGER,"+ UEB_PLAN_WDH +" INTEGER,"+ UEB_PLAN_KG +" INTEGER,"
            +" FOREIGN KEY("+UEB_PLAN_IDU+") REFERENCES "+TABLE_UEB+"("+UEB_ID+") ON DELETE CASCADE, FOREIGN KEY("+UEB_PLAN_IDP+") REFERENCES "+TABLE_PLAN+"("+PLAN_ID+") ON DELETE CASCADE");

    createTags();

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXIST "+TABLE_UEB);
    db.execSQL("DROP TABLE IF EXIST "+TABLE_TAG);
    db.execSQL("DROP TABLE IF EXIST "+TABLE_UEB_TAG);
    db.execSQL("DROP TABLE IF EXIST "+TABLE_PLAN);
    db.execSQL("DROP TABLE IF EXIST "+TABLE_UEB_PLAN);

    onCreate(db);
}

Im Fehler gibt er immer diese Zeile an:
db.execSQL("DROP TABLE IF EXIST "+TABLE_UEB);

Ich habe die Versionsnummer geändert damit er eine Neue Tabelle anlegt.
Der Grund dafür war die Zugehörigkeit von Tags und Übungen.

Der Fehler passier wenn ich eine Aktivität aufrufe die auf die Datenbank zugreifen will.

Grüße

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.06.2015, 12:47:16 via App

Die Zeile ist auch falsch müsste so aussehen:

db.execSQL("DROP TABLE IF EXISTS "+TABLE_UEB);

das S bei exists hat gefehlt

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Christian Auner
  • Forum-Beiträge: 18

10.06.2015, 18:14:59 via Website

So ein Mist aber auch....diese kleinen Fehler immer...

Und schwupp kommen neue Fehler....
Ne App schreiben ist echt keine einfache Sache...vorallem diese Datenbank geschichte :D

Konnte die meisten Fehler beheben..erstmal geht es weiter :D

Danke danke.

Antworten