SQLite不能创建表

2020-11-06 14:36发布

问题:

我先上代码:
MainActivity.java:
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MyOpenHelper myOpenHelper = new MyOpenHelper(getApplicationContext());
    //创建或打开数据库
    SQLiteDatabase writableDatabase = myOpenHelper.getWritableDatabase();
    //创建或打开数据库,如果磁盘满了,返回只读的数据库
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
}

}

public class MyOpenHelper extends SQLiteOpenHelper {

public MyOpenHelper(@Nullable Context context) {

    super(context, "lgq.db", null, 1);
}

@Override
/**
 *数据库第一次创建的始后调用
 * 那么这个方法特别适合做表结构的初始化
 *
 * */
public void onCreate(SQLiteDatabase db) {
    //id 一般以_id去写

    db.execSQL("create table Student ("
            + "id integer primary key autoincrement," + "name text,"
            + "score real," + "age integer," + "gender text)");
    System.out.println("创建完成");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

每次运行之前会将数据库删除,语句System.out.println("创建完成");会执行,在Android4.4运行正常,但在6.0上不能创建表,应该是db.execSQL()语句没有执行。
问:为什么在Android4.4上正常运行,但在6.0上却不能创建表?
求大神指教。

回答1:

不清楚你的MyOpenHelper是如何删除数据库的。
一般情况下,虽然你每次运行app,都会执行“new MyOpenHelper(getApplicationContext());”,但第二次时 lgq.db这个数据库文件已经存在,所以不再执行onCreate方法。