Tabelle wird nicht gefunden (SQLite Datenbank)

  • Antworten:3
  • Bentwortet
dplusk
  • Forum-Beiträge: 2

17.03.2021, 12:05:22 via Website

Hallo,
ich habe mit Android Studio begonnen Apps zu programmieren und scheitere jetzt leider bei der Einbindung einer bereits vorhandenen Datenbank. Sie besitzt nur eine Tabelle mit dem Namen "table1".
Ich habe sie in Android Studio im Ordner assets/databases platziert, beim Aufruf verschiedener Funktionen bekomme ich allerdings nur die Meldung im Logcat:

no such table: table1

Wo könnte mein Fehler liegen?
MainActivity
package com.dplusk.example_sql;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

DataBaseHelper dataBaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void onClickSearch(View view) {
    dataBaseHelper = new DataBaseHelper(MainActivity.this);
    try {
        String post = dataBaseHelper.getPost("table1","Moser");
        Toast.makeText(this,String.format("%s",post),Toast.LENGTH_SHORT).show();
    }catch (Exception e){
        Toast.makeText(this,"Error",Toast.LENGTH_SHORT).show();
    }
}

public void onClickUpdate(View view) {
    //Toast.makeText(MainActivity.this,"Saving successful",Toast.LENGTH_LONG).show();
}

public void onClickRows(View view) {
    dataBaseHelper = new DataBaseHelper(MainActivity.this);
    try {
        long count = dataBaseHelper.numberOfRows("table1");
        String message = String.format("%s",count);
        Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show();
    }catch (Exception e){
        Toast.makeText(this,"Error",Toast.LENGTH_SHORT).show();
    }
}

}
DataBaseHelper
package com.dplusk.example_sql;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class DataBaseHelper extends SQLiteOpenHelper {

public DataBaseHelper(@Nullable Context context) {
    super(context, "database.db", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}

public String getPost(String table, String nameIn){
    String queryString = "SELECT post FROM "+ table +" WHERE name = "+nameIn;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(queryString,null);
    StringBuffer buffer = new StringBuffer();
    while(cursor.moveToNext()){
        String post = cursor.getString(0);
        buffer.append(""+post);
    }
    cursor.close();
    db.close();
    return buffer.toString();
}

public long numberOfRows(String table){
    String queryString = "SELECT * FROM " + table;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(queryString,null);
    long count = cursor.getCount();
    cursor.close();
    db.close();
    return count;
}

}

Ich hab nun das Problem gefunden, aus irgendeinem Grund wird unter data/data/package_name/databases eine neue leere Datenbank erstellt, statt meine existierende zu übernehmen, NUR WARUM????
Vielen Dank im Voraus für Eure Hilfe.

— geändert am 17.03.2021, 15:00:25

Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.530

17.03.2021, 15:54:35 via Website

Wenn du deine mitgelieferte DB aus den Assets benutzen willst solltest du du vor dem Öffnen der DB. Die Datei aus den Assets in den App Ordner kopieren. Aber nur beim ersten App Start dann nicht mehr sonst sind deine neu gespeicherten Daten wider weg.

https://riptutorial.com/android/example/16609/create-database-from-assets-folder

— geändert am 17.03.2021, 17:48:58

Hilfreich?
dplusk
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

17.03.2021, 15:49:39 via Website

Hallo
Du willst eine DB Datei aus den Assets lesen. Das tust du das in deiner DBhelper Klasse nicht.

super(context, "database.db", null, 1);

Da wird wenn noch nicht vorhanden in dem App Ordner eine Datei angelegt.
Ein Zugriff auf die Datei aus den Assets ist das nicht, auch Möchte ich bemerken das du aus den Assets nur lesen aber nicht schreiben kannst.

Es wird warscheinlich eine DB Datei im App Ordner erstellt aber du erstellst da nicht mal eine Tabelle in der DB.
Deine onCrate und onUpdate Methode des DBhelper ist leer.

Deshalb auch die Fehlermeldung.

— geändert am 17.03.2021, 19:37:52

Hilfreich?
Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.530

17.03.2021, 15:54:35 via Website

Wenn du deine mitgelieferte DB aus den Assets benutzen willst solltest du du vor dem Öffnen der DB. Die Datei aus den Assets in den App Ordner kopieren. Aber nur beim ersten App Start dann nicht mehr sonst sind deine neu gespeicherten Daten wider weg.

https://riptutorial.com/android/example/16609/create-database-from-assets-folder

— geändert am 17.03.2021, 17:48:58

Hilfreich?
dplusk
Kommentieren
dplusk
  • Forum-Beiträge: 2

18.03.2021, 13:27:21 via Website

Vielen Dank,
diese Funktion habe ich total übersehen, nun ist sie drin und es funktioniert bestens.

Hilfreich?
Kommentieren