发表于: 2018-10-23 22:28:10
0 794
一、今天完成的事情
学习SQLite
之前只是学了SharedPreferences存储,使用方式比较简单,但只适合保存一些简单的数据和键值,当需要存储大量、复杂的关系型数据时,显然
SharedPreference就不适用了,所幸Android内置了SQLite数据库,SQLite是一款轻量级关系型数据库,支持SQL语法,运算速度快,占用资源少,很适合在移动设备上使用,并提供了一个专门的SQLiteOpenHelper类来帮助我们更方便得去操作数据库。
SQLite的数据类型比较简单,整型:integer,浮点型:real,text:文本类型,blob:二进制类型。
SQLiteOpenHelper类的构造函数有四个参数,第一个是Conetxt,第二个是数据库名,第三个是允许查询数据库时返回一个自定义Cursor,一般为null,第四个是当前数据库版本号。
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "CREATE TABLE Book ("
+ "id integer PRIMARY KEY AUTOINCREMENT, "
+ "author text, "
+ "price real, "
+ "page 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);
}
}
这里面C创建了两个表Book和Category,以Book为例,首先用PRIMARY KEY AUTOINCREMENT将id设为唯一键值,AUTOINCREMENT表示id自增长。此外又创建了四个列,文本型author,浮点型price,整型page,
文本型name,其实就是SQL建表语句。
onCreate()方法用于建表,传入建表语句就行了。
onUpgrade()方法用于升级第三个参数表示升级后的数据库版本号。
db.execSQL("DROP TABLE IF EXISTS Book");
这一句表示如果存在Book表,就将它删掉,然后调用onCreate()方法重新建表。
添加数据,逻辑清晰简单,当然也可以用SQL语句来进行操作,对比可以发现使用SQL来操作数据库代码非常短,两种方法各有各的好处。
更改数据:
二、明天计划的事情
学习内容提供器
三、遇到的问题
键盘弹出时会把整个界面顶上去
解决方法是
主窗口与键盘窗口的交互设置
四、收获
安卓中SQLite的使用方法
评论