8

私は最初のアプリを構築するための一般的なメモ帳の例から学んだ標準的なアプローチを使用しています。
しかし、私は奇妙な問題に行き詰まりました。
SQLite データベース ファイル (.db) が /data/data/package/databases に作成されていません。HeadFirst android dev のマニフェスト ファイルと OpenHelper ファイルをクロス チェックしました。本 (私は参照として使用しています) ですが、データベース ファイルが作成されない理由を理解できないことに気付きました.
特別なアクセス許可や、それを機能させるためにオンにする必要があるものはありますか??
奇妙なことは、プリロードされた例ではうまく機能することです。「.db」ファイルはメモ帳の例で作成されますが、試してみると失敗します。:(
ここに私のファイルがあります。

パッケージ - database.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);
}
}   

非常に基本的な質問であることは承知していますが、過去 15 日間、この問題を解決しようとしてきましたが、今では完全にイライラしています。
助けてください ..

4

1 に答える 1

24

これを変える:

database.execSQL("create table test_1 " + " (field1 integer primary key, field2 integer)");

そして、このTestOpenHelper openHelper = new TestOpenHelper(this);変更はSQLiteDatabase db = new TestOpenHelper(this).getWritableDatabase();

実際にはデータベースを作成していません。インスタンスを作成するだけですSQLiteOpenHelperが、データベースを作成または開くには、getWritableDatabase()またはgetReadableDatabase()メソッドを使用する必要があります。

ドキュメントから正確に:

読み取りと書き込みに使用されるデータベースを作成および/または開きます。

于 2012-06-04T21:11:25.557 に答える