.db文件不是在SQLite中创建的

时间:2012-05-23 10:21:31

标签: android database sqlite

我是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);
    }
}

我的代码出了什么问题?我是否需要为此设置任何设置,还是必须创建另一个类来创建数据库文件?

感谢。

2 个答案:

答案 0 :(得分:1)

您是否有使用DatabaseHelper类的代码?如果从未使用DatabaseHelper,则永远不会调用其onCreate方法,因此不会创建数据库。

例如,如果您尝试创建内容提供商,那么当向其发送请求时,Android将启动内容提供商(例如,活动将数据插入内容提供商)。在启动时,会调用内容提供程序的onCreate方法,这是创建数据库帮助程序实例的好地方,例如

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

Android不会为我们神奇地创建数据库帮助程序实例。

现在,我意识到您可能没有创建内容提供程序,但需要一个数据库帮助程序用于其他目的。但问题可能是相同的 - 没有代码实例化DatabaseHelper类的实例。

需要对您的应用程序进行更详细的描述,以便更加具体地了解您的需求。

答案 1 :(得分:0)

您提供了很好的代码。但您需要提及您在活动中使用的代码  您是否在活动(Launcher)中使用DatabaseHelper?
如果您没有使用它,那么将以下语句放在活动oncreate()中并运行。

DatabaseHelper databaseHelper = new DatabaseHelper();

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