0

我是 SQLite 新手,运行应用程序时没有 .db 文件

数据/数据/your.application.package/databases/

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

您提供了不错的代码。但是您需要提及您在活动中使用的代码。
您是否在活动(启动器)中使用 DatabaseHelper?
如果您不使用它,则将以下语句放入活动 oncreate() 并运行。

DatabaseHelper databaseHelper = new DatabaseHelper();

现在您可以找到您的数据库文件。

于 2013-03-20T12:13:21.380 回答