SQLite是Android里的轻量级关系型数据库,它运算速度快,占用资源少,通常只需要几百k的内存就够了,支持标准的sql语法和数据库的ACID事务。
在Android中为了能够更加方便的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,借助这个类就可以非常简单的对数据库进行创建和升级。
一 .界面图
二 .实现
1.实现界面并在activity里绑定视图
。。。。。。。。。。
2.创建StudentDataBaseHelper类继承于SQliteOpenHelper
Android 提供的SQLiteOpenHelper.java是一个抽象类,用来帮助我们实现数据库的操纵,有了SQLiteOpenHelper类,打开SQLiteDatabase的繁杂工作就简单多了
public class StudentDataBaseHelper extends SQLiteOpenHelper {
//数据库版本号和数据库名
private static final int VERSION = 1;
private static final String DATABASE_NAME = "studentBase.db";
//带全部参数的构造函数,删掉了几个参数,只剩下context,其他都写好了
public StudentDataBaseHelper(@Nullable Context context) {
super(context, DATABASE_NAME, null, VERSION);
}
//onCreate()方法,创建数据库,首次创建数据库时,就会调用onCreate(SQLiteDatabase)方法,本次student表里有name和class列。
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql = "create table student(name varchar(20),class varchar(20))";
sqLiteDatabase.execSQL(sql);
}
//onUpgrade()方法,负责与升级相关的工作,先不写
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
3.新建数据库
final SQLiteDatabase db = new StudentDataBaseHelper(getApplicationContext())
.getWritableDatabase();
复制代码4.对数据库进行操作
负责处理数据库写入和更新操作的辅助类是ContentValues。它是一个键值存储类,类似于Java的HashMap和前面用过的Bundle。不同的是,ContentValues只能用于处理SQLite数据。
(1)增
insert(String table, String nullColumnHack, ContentValues values)
方法传入的第一个参数是数据表,第三个是要写入的数据。
第二个参数称为nullColumnHack。当values参数为空或者里面没有内容的时候,insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。
mInsertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentValues values=new ContentValues();
values.put(“name”, String.valueOf(mInsertStuNameText.getText()));
values.put(“class”, String.valueOf(mInsertStuClassText.getText()));
db.insert(“student”,null,values);
}
});
(2)改
update(String table, ContentValues values, String whereClause, String[] whereArgs)
方法传入表名,value,where子句,where子句的参数值。
mUpdateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentValues values2 = new ContentValues();
values2.put(“name”, String.valueOf(mUpdateStuNameText.getText()));
values2.put(“class”, String.valueOf(mUpdateStuClassText.getText()));
db.update(“student”, values2, “name=?”, new String[]{mUpdateStuNameText.getText().toString()});
}
});
(3)删
delete(String table, String whereClause, String[] whereArgs)
方法传入表名,where子句,where子句的参数值。
mUpdateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentValues values2 = new ContentValues();
values2.put(“name”, String.valueOf(mUpdateStuNameText.getText()));
values2.put(“class”, String.valueOf(mUpdateStuClassText.getText()));
db.update(“student”, values2, “name=?”, new String[]{mUpdateStuNameText.getText().toString()});
}
});
(4)查
需要cursor,cursor内部就像手指,总是指向查询的某个地方。因此,要从cursor中取出数据,首先要调用moveToFirst()方法移动虚拟手指指向第一个元素。读取行记录后,再调用moveToNext()方法,读取下一行记录,直到isAfterLast()说没有数据可取为止。最后,别忘了调用Cursor的close()方法关闭它。
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy,String limit)
query方法中limit可以没有,方法的参数含义:
table:表名。
columns:要查询出来的列名。
selection:查询条件子句。
selectionArgs:查询条件子句的值。
groupBy:分组。
having:分组后聚合的过滤条件。
orderBy:排序。
limit:指定偏移量和获取的记录数。
要查哪个人是哪个班的,改selection和selectionArgs的值,比如
Cursor cursor = db.query(“student”, null, “name=?”, new String[]{mQueryText.getText().toString()}, null, null, null);
完整:
mQueryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Cursor cursor = db.query(“student”, null, “name=?”, new String[]{mQueryText.getText().toString()}, null, null, null);
StringBuilder text = new StringBuilder();;
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
String StuName = cursor.getString(cursor.getColumnIndex(“name”));
String StuClass = cursor.getString(cursor.getColumnIndex(“class”));
text.append(StuName).append("\t").append(StuClass).append("\n");
cursor.moveToNext();
}
cursor.close();
mShowTextView.setText(text);
}
});