sqlite-Datenbank nicht erstellt
Bin ich mit dem standard-Ansatz, die ich gelernt von den beliebten notepad-Beispiel für den Aufbau meines ersten app.
Aber ich steckengeblieben in ein seltsames problem.
Die SQLite-Datenbank-Datei (.db) wird nicht angelegt in /data/data/Paket/Datenbanken. Ich habe überprüft manifest-Datei und OpenHelper Datei aus Kopfüber android dev. Buch ( ich benutze es als Referenz ), aber ich fand mich nicht in der Lage, um herauszufinden, warum die Datenbank-Datei wird nicht erstellt..
Gibt es irgendwelche speziellen Berechtigungen oder etwas, das wir wechseln müssen, um es zu arbeiten??
seltsame Sache ist, dass seine arbeiten gut für pre-loaded Beispiele. bedeutet".db' - Datei erstellt mit dem Editor Beispiel, aber wenn ich versuche, es scheitert. 🙁
hier sind meine Dateien.
Paket - Datenbank.test
1. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".Database_testActivity"
android:label="@string/app_name" >
</activity>
</application>
2.TestOpenHelper.java
package database.test;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class TestOpenHelper extends SQLiteOpenHelper {
TestOpenHelper(Context context){
super(context,"mydb.db",null,1);
}
@Override
public void onCreate(SQLiteDatabase database){
database.execSQL("create table test_1 " + " (field1 integer primary key, field2 integer);");
}
public void onUpgrade (SQLiteDatabase database, int oldVersion, int newVersion){
database.execSQL("drop table if exists test1");
onCreate(database);
}
}
3.Database_testActivity.java
package database.test;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class Database_testActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView listview = (ListView)findViewById(R.id.test_list);
TestAdapter ta = new TestAdapter();
listview.setAdapter(ta);
TestOpenHelper openHelper = new TestOpenHelper(this);
}
}
Ich weiß, das ist eine sehr grundlegende Frage, aber ich habe versucht, dies zu lösen, für die letzten fünfzehn Tage, und jetzt bin ich komplett frustriert.
Bitte um Hilfe ..
- Sollten Sie verwenden
Log
an verschiedenen Orten und überwachenlogcat
zu verfolgen, was passiert. Auch ich kann mich irren, aber haben Sie versucht, mit "mydb" für die db-Namen in derTestOpenHelper
Konstruktor? Wie gesagt, ich kann falsch sein, aber ich kann nicht helfen, Gefühl mit einem Dateinamen-Erweiterung (wie in "mydb.db") Probleme verursachen könnte. - können Sie werfen etwas Licht auf
using Log
. Ich habe verschiedene Namen, aber nichts passiert. danke - auch jede app. in /data/data beginnt mit com.android.etwas, aber mir nicht. kann es der Grund sein für mein problem ??
- Etwas wie
Log.d("MyAppName", "In TestOpenHelper constructor");
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern:
und diese
TestOpenHelper openHelper = new TestOpenHelper(this);
änderungSQLiteDatabase db = new TestOpenHelper(this).getWritableDatabase();
Du wirklich nicht erstellte Datenbank, die Sie nur erstellen Sie eine Instanz Ihrer
SQLiteOpenHelper
aber für erstellen oder öffnen Sie die Datenbank, die Sie verwenden müssengetWritableDatabase()
odergetReadableDatabase()
Methode.Genau aus docs:
getWritableDatabase()
odergetReadableDatabase()
diese Methoden erstellen / öffnen Sie Ihre Datenbank. wenn Ihre Datenbank bereits erstellt, so dass diese Methoden immer nur öffnen Sie Ihre Datenbank.com.example.mypackage.myapp
. Siehe die Antworten auf die Frage, die ich über "generic" - Paket-Namen stackoverflow.com/questions/8872787/... ich habe einen domain-Namen, damit ich die Namen meiner Pakete abcom.mydomain.mypackage.
. Sie sollten nichtcom.android
alsandroid.com
ist ein registrierter domain-Namen.