参考书籍:第一行代码
我们Android系统是内置了数据库的,在SDK中的platform-tools文件夹中。
SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百k的内存就足够了,因此比较适合在移动设备上使用。
创建数据库
首先我们需要创建一个自己的帮助类,去继承于SQLiteOpenHelper这个帮助类。SQLiteOpenHelper中有两个抽象方法,一个是onCreate()方法,在这个方法中实现创建数据库的逻辑。一个是onUpgrade()方法,在这个方法中实现升级数据库的逻辑。
MyDatabaseHelper .java 类
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, 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,"创建成功",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
我们把创建数据库的SQL语句定义成一个常量,然后在onCreate()方法中去调用SQLiteDatabase的execSQL()方法中去执行这条创建表的语句,并弹出创建成功的语句。这样在创建数据库的同时也可以把表创建了。
SQLite的数据类型比较简单,我们这里简单讲一下,
integer 表示整型
real 表示浮点型
text 表示文本类型
blob 表示二进制类型
acticity_main.xml代码
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/create_database"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#F0FFFF"
android:text="创建数据库"/>
</LinearLayout>
这里加了一个按钮,用于创建数据库。
MainActivity.java代码
public class MainActivity extends AppCompatActivity {
private MyDatabaseHelper myDatabaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//帮助类对象
myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
Button createDatabase = findViewById(R.id.create_database);//添加创建数据库的按钮控件
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myDatabaseHelper.getWritableDatabase();//创建数据库
}
});
}
}
这里在onCreate()方法中构建了一个MyDatabaseHelper对象,并且通过构造函数的参数,第一个参数是场景,第二个参数为数据库名(记得要加后缀.db,不然他会认为不是个SQLite数据库),第三个参数是游标,第四个参数是版本号(第一次创建就写1,用于升级)。
创建数据库提供了两种方法,一个是getReadableDatabase()方法和getWritableDatabase()方法。这两个方法都可以创建或打开一个数据库(如果数据库已存在就直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。我这里用的是getWritableDatabase()。
然后你就可以去运行这个程序了。它存在在**/data/data/你的包名/databases/**目录下。但是表你无法通过它查看,我这里用的是SQLite Expert Professional查询。你把数据库文件保存到本地桌面上,然后将他拖进SQLite Expert Professional中,就可以查看到了,但是SQLite Expert Professional有一个不好的地方,你每次往数据库里添加了东西,都要重新导入SQLite Expert Professional中,他相当于一个离线的,不能同步刷新。
现在是什么数据都没有的,因为我们还没有往里面加数据。
SQLite Expert Professional下载网址:https://www.7down.com/soft/4072.html
升级数据库
MyDatabaseHelper .java 类
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)";
public static final String CREATE_CATEGORY = "create table Category("
+ "id integer primary key autoincrement,"
+ "category_name text,"
+ "category_code integer)";
private Context mcontext;
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);
db.execSQL(CREATE_CATEGORY);
Toast.makeText(mcontext,"创建成功",Toast.LENGTH_SHORT).show();
}
@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);
}
}
这里我们新建了一个表Category,然后在onUpgrade