我先上代码:
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上却不能创建表?
求大神指教。
不清楚你的MyOpenHelper是如何删除数据库的。
一般情况下,虽然你每次运行app,都会执行“new MyOpenHelper(getApplicationContext());”,但第二次时 lgq.db这个数据库文件已经存在,所以不再执行onCreate方法。