您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
24_如何创建数据库oncreate和onupdate方法
发布时间:2021-02-12 17:38:59编辑:雪饮阅读()
首先界面上需要一个按钮(看情况)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"
android:id="@+id/send_button"
android:onClick="send"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"
android:id="@+id/send_button"
android:onClick="send"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
然后写一个数据库操作类
MyDBOpenHelper.java
package com.example.myapplication; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class MyDBOpenHelper extends SQLiteOpenHelper {
/**
*
* @param context 应用程序上下文
* @param name 数据库的名字
* @param factory 查询数据库的游标工厂 一般情况下 用sdk默认的
* @param version 数据库的版本 版本号必须不小于1
*
*/
public MyDBOpenHelper(Context context) {
//调用父类构造:上下文,数据库保存文件,游标工厂(为null表示使用默认工厂游标)
super(context, "itheima.db", null, 1);
}
//在数据库第一次(是否第一次是取决于数据库保存文件,如这里的itheima.db是否有效[存在等])被创建的时候会执行onCreate()
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("oncreate被调用");
//建表
db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("onUpgrade被调用");
db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL ");
}
}
最后主控上MainActivity.java实现send方法
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void send(View view) {
MyDBOpenHelper helper = new MyDBOpenHelper(this);
//获取可读数据库,仅仅是new并不会创建数据库,这里执行之后才会
helper.getReadableDatabase();
}
}
最后部署项目后点击布局中的按钮就可以创建成功了
然后将这3个db文件都复制到例如桌面的一个目录中
然后下载并安装sqlite expert(一个sqlite数据库工具)
然后打开sqlite expert在file=》open Database中选择刚才的主db文件
打开之后就会发现库和表都创建成功了
数据库升级
对于新旧项目迭代,典型的如涉及到数据库结构变更ddl操作时就会执行前面的MyDBOpenHelper
.java中的onUpgrade方法中的逻辑,但是要执行该逻辑还有一个必要条件,即构造中(这里是MyDBOpenHelper的构造)调用父级传参版本号大于上次的版本号才会触发执行onUpgrade方法。
如下将版本号修改下即可:
package com.example.myapplication;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDBOpenHelper extends SQLiteOpenHelper {
public MyDBOpenHelper(Context context) {
super(context, "itheima.db", null, 2);
}
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("oncreate被调用");
db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("onUpgrade被调用");
db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL ");
}
}
当重新运行项目并操作按钮点击事件后数据库升级(这里的操作是字段新增)就成功了
关键字词:android,数据库
上一篇:23_生成xml文件
下一篇:25_数据库的增删改查