SQLite ——创建数据库与升级数据库

  Android内置了SQLite数据库,提供了SQLiteOpenHelper帮助类管理数据库,SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),必须在自己的帮助类中重写这两个方法,然后分别在这两个方法中创建、升级数据库的逻辑。

  SQLiteOpenHelper中两个非常重要的实例方法: getReadableDatabase() 和 getWritableDatabase() ,这两个方法都可以创建或打开一个数据库(如果不存在则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。当数据库不可写入(磁盘空间已满),getReadableDatabase()方法返回的对象将以只读方法打开数据库,而getWritableDatabase()方法将出现异常。

SQLiteOpenHelper有两个构造方法,一般用参数少的那个就可以

方法:

构建SQLiteOpenHelper实例,调用getReadableDatabase()或getWritableDatabase()就可以创建数据库

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private Context mContext;

    public static final String CREATE_BOOK = "create table Book ( id integer primary key autoincrement, author text, price real, pages integer, name text )";

    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){
        super(context, name, factory, version);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL(CREATE_BOOK);
        Toast.makeText(mContext,"Create succeeded", Toast.LENGTH_SHORT).show();
    }

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

    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.snowair.databasepractice.MainActivity">

    <Button
        android:id="@+id/create_database"
        android:text="建立数据库"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>
package com.example.snowair.databasepractice;

import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    MyDatabaseHelper myDatabaseHelper;

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

        Button createDatabase = findViewById(R.id.create_database);
        myDatabaseHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
        createDatabase.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                myDatabaseHelper.getReadableDatabase();
            }
        });
    }
}

sql语句:

create table Book(

    id integer primary key auto increment,

    author text,

    price real,

    pages integer,

     name text) 

数据库的升级

  想要在已经存在的数据库中添加表,在onCreate()里之间添加创建表没有用处,因为数据库已经存在,是不会再调用onCreate()函数,这时需要onUpgrade想要升级数据库,比如要在原有数据库的基础之上增加一个表,如果数据库已经存在,在onCreate()里再添加创建表没有用处,因为数据库已经存在,是不会再调用onCreate()函数,这时需要onUpgrade()

 @Override
    public void onUpgrade(SQLiteDatabase db, int oldvVersion ,int newVersion){
        db.execSQL("drop table if exists Book");
        db.execSQL("drop table if exists Category");
        onCreate(db);
    }
在onUpgrade()中将表删除掉,再调用onCreate(),重新建表。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值