一、创建SQLite数据库在android内部
- SQLiteOpenHelper类介绍:
- 抽象类,内含两个抽象方法:onCreate()和onUpgrade(),还有两个实例方法:getReadableDatabase()和getWritableDatabase()
- 这两个实例方法都可以创建或者打开一个现有的数据库(如果数据库已经存在那么直接打开,否则会先创建一个新的数据库),并且返回一个可以对数据库进行读写操作的对象。
- 不同的是,当数据库不可以写入的时候(如磁盘空间已经满了)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法将会抛出异常。
- 创建一个Database的项目
- 创建一个名为BookStore.db的数据库,新建表Book,内含主键id,作者、价格、页数和书名,接下来介绍一下SQLite数据库含有的数据类型
英文简称 | 数据类型 |
---|
integer | 整形 |
real | 浮点型 |
text | 文本类型 |
blob | 二进制类型 |
- 另外我们可以使用primary key将id设置为主键,并且使用autoincrement关键字来表示id列是自增长的。
- 新建MyDatabaseHelper类继承自SQLiteOpenHelper
package com.example.databasetest;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
public class MyDatabaseHelper extends SQLiteOpenHelper{
public static final String CREATE_BOOK = "create table Book (" + "id integer primary key autoincrement," + "author text," + "price real,"+ "pages integer," + "name text)";
private Context mContext;
public MyDatabaseHelper(Context context,String name,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_LONG).show();
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion ,int newVersion) {
}
}
- 我们先定义了创建数据库的语句,然后使用数据库的实例在重写的方法onCreate中,调用了execSQL方法来执行SQL语句。
- 构造方法中的四个参数:(1)Context,必须要有他才能对数据库进行操作;(2)数据库名;(3)允许我们在查询数据的时候返回一个自定义的Cursor,一般就是传入null;(4)当前数据库的版本号,可以用于对数据库进行升级操作。
- 构建好的数据库放在
/data/data/<package name>/database
目录下 - 接下来修改
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/create_database"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Create database" />
</LinearLayout>
- 就是添加了一个按钮,用于创建数据库
- 下面修改
MainActivity
package com.example.databasetest;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
Button createDatabase = (Button)findViewById(R.id.create_database);
createDatabase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.getWritableDatabase();
}
});
}
}
- 给按钮一个点击事件,我们一旦点击这个按钮的时候,就会自动检测到没有这个数据库,就会自动调用onCreate方法。如下就是我们的界面
- 我们都创建好了,但是我们通过File Explorer只能看见BookStore.db数据库创建好了,但是不知道Book这个数据表到底是否创建成功了。因此我们打算使用adb shell来查看。
- adb shell 是Android SDK中自带的一个调试工具,使用这个工具可以直接对连接在电脑上的手机或者模拟器进行调试草还,他存放在sdk的platform-tools目录中,如果想要在命令行中使用这个工具,那么我们首先要把它配置到环境变量中。我们下次连载在进行演示。
二、源码: