未创建SQLite数据库

时间:2019-10-06 17:27:50

标签: android database sqlite

public class SampleDB extends SQLiteOpenHelper
{

    public static final String DATABASE_NAME = "sample.db";
    public static final String TABLE_NAME = "student_table";
    public static final String COL_1 = "id";
    public static final String COL_2 = "name";


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

    @Override
    public void onCreate(SQLiteDatabase db)
    {
         db.execSQL("CREATE TABLE "+ TABLE_NAME + " ( " +
            COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COL_2 + " TEXT)"
         );

    insertData(1,"abc");
    insertData(2,"def");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(db);
    }

    public void insertData(int id, String name)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COL_1,id);
        cv.put(COL_2,name);
        db.insert(TABLE_NAME,null,cv);
    }
}

我想念什么吗?我已经在MainActivity的onCreate()中编写了以下代码。

SampleDB mydb = new SampleDB(this);

P.S:当我不调用insert并在构造函数中写入getWritableDatabase()时,将创建空数据库架构。

1 个答案:

答案 0 :(得分:0)

来自https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper

  

在调用getWritableDatabase()或getReadableDatabase()之一之前,实际上不会创建或打开数据库。

已更新:

一些有关此类问题的一般指导:-

在开发和更改数据库代码时,值得一提的是,通过重置数据库进行测试时,始终从已知的角度出发。这可以通过以下方式完成:-

  • 使用Android Studio中的“设备文件资源管理器”浏览到/ data / data / {您的包名称} /数据库并删除文件

  • 在构造函数中更改数据库版本号以进行升级代码(不太好)