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

Connection zur SQLite Datenbank funktioniert nicht

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von android_noob123, 20.11.2010.

  1. android_noob123, 20.11.2010 #1
    android_noob123

    android_noob123 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    31.10.2010
    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ß
     
  2. funcoder, 20.11.2010 #2
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Ä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.
     
  3. enrem, 20.11.2010 #3
    enrem

    enrem Erfahrener Benutzer

    Beiträge:
    188
    Erhaltene Danke:
    13
    Registriert seit:
    17.01.2010
    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
     

Diese Seite empfehlen