Connection zur SQLite Datenbank funktioniert nicht

A

android_noob123

Neues Mitglied
0
Hey Leute,

ich ärger mich jetzt schon Stunden mit dem Zugriff auf eine SQLite DB rum. Habe inzwischen zwei Tutorials gemacht, im Internet nach dem Fehler gesucht aber meinen Zugriff auf eine SQLite DB immer noch nicht hinbekommen. :angry:
Immer bekomme ich folgende Meldung: android.database.sqlite.SQLiteException: unable to open database file

Pfad und Namensgebungt ist doch korrekt? Benötige ich einen Zusatz .sqlite?
Nicht, dass ich es damit noch nicht probiert hätte, aber trotzdem wichtig zu wissen.
Code:
final static String DB_PATH = "C:Hier/steht/mein/Pfad/";
final static String DB_NAME = "mydatabase";
Wenn dieser Teil doch schon stimmt, dann müsste ich doch ohne Probleme entweder eine Datenbank öffnen können:
Code:
myDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
oder falls es diese noch nicht gibt, sie erstellen:
Code:
myDB = SQLiteDatabase.openOrCreateDatabase(myPath, null);

Schon allein das klappt bei mir nicht. Zusätzlich habe ich noch permissions vergeben....erfolglos. Vielleicht die falschen??

Mhh...wäre euch für Hilfe sehr dankbar, bin gerade etwas ratlos...

Gruß
 
Äh ich glaube, das Problem dürfte daran liegen, das du ein Windows Pfad angibst. Das ganze läuft aber im Emulator, also muss deine DB auch innerhalb des Emulator Bereichs gespeichert werden. Quasi:

/data/data/com.Dein.Package/databases/

final static String DB_PATH = "/data/data/com.Dein.Package/databases/";

Die obige Zeile ändern, dann sollte es funktionieren.
 
Wenn du die Daten auf einer SD-Karte hast dann "/sdcard/deine_datenbank.db"

Code:
public class SQLSample extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SQLiteDatabase db = null;

        try {
            
            // Datenbank auf SD-Karte erzeugen anschl. öffnen
            String path = "/sdcard/renem_sql_sdcard.db";
            db = SQLiteDatabase.openOrCreateDatabase(path, null);

            // Tabelle Kontakt ertsellen
            db.execSQL("CREATE TABLE IF NOT EXISTS " + "Kontakt" + " (Suchname TEXT, Telefon TEXT);");

            // Datensätze einfügen
            db.execSQL("INSERT OR IGNORE INTO " + "Kontakt" + " VALUES ('Homer', '1234567890');");
            db.execSQL("INSERT OR IGNORE INTO " + "Kontakt" + " VALUES ('Lisa',  '2345678901');");
            db.execSQL("INSERT OR IGNORE INTO " + "Kontakt" + " VALUES ('Bart', '3456789012');");
            db.execSQL("INSERT OR IGNORE INTO " + "Kontakt" + " VALUES ('Karl',  '4567890123');");

            String[] values = { "Suchname", "Telefon" };
            Cursor myCursor = db.query(true, "Kontakt", values, null, null, null, null, null, null);

            if (myCursor != null) {
                int suchname = myCursor.getColumnIndexOrThrow("Suchname");
                int telefon = myCursor.getColumnIndexOrThrow("Telefon");
                
                String result = "";
                if (myCursor.moveToFirst()) {
                    do {
                        String suchn = myCursor.getString(suchname);
                        String tel = myCursor.getString(telefon);
                        result = result + "Suchname : "+ suchn + " Telefon : " + tel + "\n";
                    } while (myCursor.moveToNext());
                }
                
                result = result + "\nDie Datenbank (renem_sql_sdcard.db) befindet "+
                "sich auf der SD-Karte. Mit dem SQLite Databrowser können Sie direkt darauf zugreifen.";

                TextView myMessage = (TextView) findViewById(R.id.message);
                myMessage.setText(result);    

            }        
        
        } catch (Exception e) {
            // Fehler ggf. ist die Karte gemountet oder die android.permission.WRITE_EXTERNAL_STORAGE
            // im Manifest wurde vergessen....
            ;
        } finally {
            db.close();
            Toast.makeText(getApplicationContext(), "Alle OK.", Toast.LENGTH_LONG).show();
        }
        
    }
}
Wichtig ist auch die Premission in der Manifestdatei.

Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="de.renem.android.sqlsdcard"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <permission-group android:name="android.permission-group.STORAGE"></permission-group>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SQLSample"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="6" />
</manifest>
Hier ein funktionierendes Beispiel: Schnipsel:RM SQL SDCard ? Android-Schnipsel-Wiki

Gruß enrem
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.011
swa00
swa00
SaniMatthias
Antworten
19
Aufrufe
952
swa00
swa00
S
Antworten
33
Aufrufe
2.668
Sempervivum
S
Zurück
Oben Unten