安卓开发之SQLite(表的创建和更新)

  Android为了让我们能够更加方便地管理数据库,专门提供了一个SQLiteOpenHelper帮助类,我们可以借助这个类对数据库进行创建和升级.SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们需要在自己的帮助类里面重写这两个方法,分别在这两个方法中去实现创建,升级数据库的逻辑.

  SQLiteOpenHelper有了两个非常重要的方法,getReadableDatabase()和getWritableDatabase().这两个方法都可以创建或者打开一个现有的数据库,(存在直接打开,不存在创建一个),并返回一个可对数据库进行读写操作的对象.

  当数据库不可写入(如磁盘空间已满),getReadableDatabase(0方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则出现异常.

  SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数少一点的那个构造方法即可.这个构造方法中接受4个参数,第一个参数是Context,必须要有它才能对数据库进行操作.第二个参数是数据库名,创建数据时使用的就是这里指定的名称,第三个参数语序我们在查询数据的适合返回一个自定义的cursor,一般传入null,第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作,构建SQLiteOpenHelper的实例之后,在调用它的getReaableDatabase()或getWritableDatabase()方法就能创建数据库了.数据库文件存放在/data/data/<package name>/database/目录下.此时,重写onCreate()方法就会得到执行,所以通常在这里去处理一些创建表的逻辑.

  创建表时所需要用到的数据类型:integer(整型),real(浮点型),text(文本型),blob(二进制),

             约束:primary key为主键,autoincrement关键字表示id列时自 增长的.

 

实际操作代码:

新建MyDatabaseHelper类继承自SQLiteOpenHelper,代码如下

public class MyDatabaseOpenHelper extends SQLOpenHelper{

  public static final String CREAT_BOOK = "create table Book("

    +"id integer primary key autoincrement,"
    +"author text,"

    +"price real,"
    +"page inrteger,"
    +"name text)";

  private Context mContext;

  public MyDatabaseHelper(Context context,String name,SQLDatabse,CursorFactory     factory,int version){

      super(context,name,factory,version);
      mContext = context;

}

@Override

public void onCreate(SQLiteDatabase db){

  db.exec(CREATE_BOOK);

}

@Override

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

}

}

 

MainActivity.class中的代码

public class MainActivity extends APPCompatActivity{

  private MyDatabaseHelper dbHelper;

  @Override

  protected void onCreate(Bundle saveInstanceState){

  super.onCreate(saveInstanceState);

  setContenView(R.layout.activity_main);

  dbHelper=new MyDatabaseOpenHelper(this,"BookStore.db",null,1);

  Button createDatabase =(Button)findViewById(R.id.create_database);

  createbase.setOnClickListener(new View.OnClickListener(){

  @Override

  public void onClick(View v){

  dbHelper.getWritableDatabase();

  }

});

}

}

 

布局文件

....

<Button

  android:id="@+id/create_database"

  android:layout_width="match_parent"

  android:layout_height="wrap_parent"

/>

</LinearLayout>

到这里,第一个表的创建就完成了,但是如果我们想再创建一个表,应该怎么办呢?

用同样的方法在onCreate()里面添加代码,如果我们这样尝试过,会发现表是没有办法创建的,这是因为BookStorre.db数据库已经存在了,代码中的onCreate就不会执行,我们可以选择卸载软件,重新安装或者使用onUpgrade()方法进行升级,

public class MyDatabaseHelper extends SQLiteOpenHelper{

  ...

  @Override

  public void onUpgrade(SQLiteDatabase db,int oldversion,int newVersion){

  db.execSQL("drop table if exists Book");

  db.execSQl("drop table if exists Category") ;

  onCreate(db); 

}

}

在这里,我们执行了drop语句,如果数据中已经存在Book或者Categroy,就会先删除掉,在调用onCreate重新创建,

然后我们需要让onUpgrade()方法执行,只需要SQLiteOpenHelper的构造方法里接受的第四个参数,它表示当前的版本好,之前我传入的是1,现在只要传入一个比1大的数字,onUpgrade就会执行
修改MainActivity,class中的代码即可,

dbHelper =new MyDatabaseHelper(this,"BookStore.db,null,2");

以上便是SQLiteDatbaseOpneHelper()的创建表和升级表.

posted @ 2020-05-15 00:00  pickGo  阅读(587)  评论(0编辑  收藏  举报