0

私は SQLite を初めて使用し、アプリケーションを実行すると .db ファイルがありません

データ/データ/your.application.package/データベース/

package com.navigationsystem;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.hardware.SensorManager;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME="navigationsystem.db";
    public static final String NODE_ID="nodeID";

    public static final String CHILD_ID="childID";
    public static final String PARENT_ID="parentID";

    private SQLiteDatabase db;  

    public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    db.execSQL("CREATE TABLE nodes( nodeID CHAR(1) PRIMARY KEY );");
    db.execSQL("CREATE TABLE edges( childID CHAR(1) NOT NULL, parentID CHAR(1) NOT NULL,PRIMARY KEY(childID,parentID) );");

    this.db = this.getWritableDatabase(); 
    ContentValues cv=new ContentValues();

    cv.put(NODE_ID, "A");
    db.insert("nodes", NODE_ID, cv);
    cv.put(NODE_ID, "B");
    db.insert("nodes", NODE_ID, cv);
    cv.put(NODE_ID, "C");
    db.insert("nodes", NODE_ID, cv);
    cv.put(NODE_ID, "D");
    db.insert("nodes", NODE_ID, cv);
    cv.put(NODE_ID, "E");
    db.insert("nodes", NODE_ID, cv);
    cv.put(NODE_ID, "E");
    db.insert("nodes", NODE_ID, cv);


    cv.put(CHILD_ID, "A");
    cv.put(PARENT_ID, "C");
    db.insert("edges", CHILD_ID, cv);
    db.insert("edges", PARENT_ID,cv);

    cv.put(CHILD_ID, "B");
    cv.put(PARENT_ID, "E");
    db.insert("edges", CHILD_ID, cv);
    db.insert("edges", PARENT_ID,cv);

    cv.put(CHILD_ID, "C");
    cv.put(PARENT_ID, "D");
    db.insert("edges", CHILD_ID, cv);
    db.insert("edges", PARENT_ID,cv);

    cv.put(CHILD_ID, "C");
    cv.put(PARENT_ID, "F");
    db.insert("edges", CHILD_ID, cv);
    db.insert("edges", PARENT_ID,cv);
    db.close();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    android.util.Log.w("Constants", "Upgrading database, which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS constants");
    onCreate(db);
    }
}

コードの何が問題になっていますか? このために必要な設定はありますか、またはデータベース ファイルを作成するために別のクラスを作成する必要がありますか?

ありがとう。

4

2 に答える 2

1

DatabaseHelper クラスを使用するコードはありますか? DatabaseHelper が使用されない場合、その onCreate メソッドは呼び出されないため、データベースは作成されません。

たとえば、コンテンツ プロバイダを作成しようとしている場合、コンテンツ プロバイダは、リクエストが送信されたときに Android によって開始されます (アクティビティがデータをコンテンツ プロバイダに挿入するなど)。起動時に、コンテンツ プロバイダーの onCreate メソッドが呼び出されます。これは、次のようなデータベース ヘルパー インスタンスを作成するのに適した場所です。

@Override
public boolean onCreate() {
    dbHelper = new DatabaseHelper(getContext());
    ...
}

Android が魔法のようにデータベース ヘルパー インスタンスを作成することはありません。

ここで、コンテンツ プロバイダーを作成するのではなく、他の目的でデータベース ヘルパーが必要な場合があることに気付きました。しかし、問題はおそらく同じです。DatabaseHelper クラスのインスタンスをインスタンス化するコードはありません。

何をする必要があるかをより具体的にするために、アプリケーションのより詳細な説明が必要です。

于 2012-05-23T10:29:11.720 に答える
0

You have provided the nice code. But you need to mention the code that you used in your activity.
Are you using the DatabaseHelper in your activity(Launcher) or not?
If you are not using it, then put this below statement inside activity oncreate() and run.

DatabaseHelper databaseHelper = new DatabaseHelper();

Now you can find your database file.

于 2013-03-20T12:13:21.380 に答える