通过SQLiteOpenHelper类可以实现对数据库的创建和升级。首先,SQLiteOpenHelper是一个抽象类,如果要使用这个类,只能通过创建一个帮助类去继承他。这个抽象类中有两个抽象方法,onCreate()和onUpgrade(),我们需要在自己的类中实现并重写这两个方法,然后在这两个方法中去创建和升级数据库的逻辑。
SQLiteOpenHelper类中还有两个非常重要的实例方法,getWritableDatabase()和getReadableDatabase(),这两个方法都能够创建或者打开一个现有的数据库,并返回一个可对数据库进行读写操作的对象,当磁盘空间已经满的时候,getReadableDatabase()方法返回的对象将以只读的方式打开数据库,getWritableDatabase()方法将出现异常。
SQLiteOpenHelper类有两个可以用的构造方法,一般用参数比较少的那个。
SQliteOpenHelper(Context context,"databasename",null,"version of database"){}
实例
创建一个名为book的数据库
- 新建一个类继承自SQLiteHelper,要重写里面的主要方法,同时在onCreate()方法中执行SQL语句。
package ouc.b304.com.sqlitetest;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class MySQLite extends SQLiteOpenHelper {
private static final String TAG="DATABASE";
private static final String CREATETABLE="create table book("+" id integer primary key autoincrement,"+"author text"+"price real"+"pages integer"+"name text)";
public MySQLite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATETABLE);
Log.d(TAG,"is created");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
- 在MainActivity中实现布局和逻辑
package ouc.b304.com.sqlitetest;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.btn_createdatabase);
final SQLiteOpenHelper myHelper = new MySQLite(getApplicationContext(), "book", null, 1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myHelper.getWritableDatabase();
}
});
}
}
- 在实例化自己的SQLiteHelper类以后,要通过getWritableDatabase()方法才能得到数据库实例。
- 如果数据库已经成功创建,那么再次点击创建的时候,数据库不会重复创建。
对数据库进行升级
如果想要在数据库中再次添加一张表,可以通过在自建SQLiteHelper类中的onUpgrade()方法中添加逻辑实现,并不能在onCreate()方法中添加逻辑实现新表的创建,同时应该在onUpgrade()方法中进行逻辑的判断,因为前提是数据库的表从来没有新建过,如果一旦onCreate()方法执行过一次之后,那么再次修改onCreate()方法是无用的。
如果想实现数据库的升级,应当在MainActivity中创建MyHelper实例的时候把versioncode更改为比1大的数。
网友评论