一.为什么要用SQLite?
1.SharedPreferences是以XML形式存储数据的,只适合存储基本数据类型的数据。
2.文件存储的内容在提取(解析)数据时,相对复杂。
3.当数据量大、结构复杂时,如果使用 SharedPreferences和文件存储对数据的操作将变得非常复杂,效率低下,容易出错,Android中提供了SQLite数据存储,帮助我们解决这些问题。
二.什么是SQLite?
1.SQLite数据库存储时Android系统提供的数据存储方式之一。
2.SQLite是专为嵌入式设备设计的一款轻量级数据库。
3.SQLite占用资源非常低,在嵌入式设备中,只需要几百K的内存。
4.SQLite支持标准的SQL语法,遵循数据库的ACID事务(ACID:增删改查)。
5.SQLite不需要安装,不需要用户名密码就可以使用。
三.如何创建数据库和数据表?
1.新建类继承SQLiteOpenHelper;
2.实现构造方法;
(1).父类中未提供默认构造方法,必须显示调用父类的构造方法。
(2).需要传递创建的数据库名称以及数据库版本。
例如:
SQLiteOpenHelper(Context context,String name,CursorFactory factory, int version)
(1).Context context:上下文环境
(2).String name:数据库名
(3).CursorFactory factory:允许开发者查询数据的时候返回一个自定义的Cursor,一般传入null。
(4). int version:当前的数据库的版本号,可用于对数据库进行升级操作。
3.重写onCreate方法;
(1).此方法只会在第一次创建时执行,只会执行一次。
(2).此方法中使用标准的SQL语句创建数据表。
(3).onCreate方法有一个SQLiteDatabase对象参数,通过调用execSQL方法执行建表SQL语句。
4.重写onUpgrade方法;
(1).此方法用来升级数据库表结构时触发。
(2).当需要增加表字段或增加表时,传递进来一个新的数据库版本号,就会触发此方法。
5.实例化SQLiteOpenHelper的子类对象;
6.调用getReadableDatabase方法或getWritableDatabase方法。
代码如下:
package com.example.androidthree;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by lenovo on 2018/6/13.
*/
public class MySqliteHelper extends SQLiteOpenHelper {
private String sql="create table student(" +
"id integer primary key autoincrement not null," +
"name text," +
"age integer" +
")";
public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
四.如何添加数据?
private void addStudent() {
String name = studentName.getText().toString();
int age = Integer.parseInt(studentAge.getText().toString());
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();
sqLiteDatabase.insert("student", null, values);
}
五.如何删除数据?
private void deleteStudent() {
String name = studentName.getText().toString();
MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();
sqLiteDatabase.delete("student", "name=?", new String[]{name});
}
六.如何修改数据?
private void updateStudent() {
String name = studentName.getText().toString();
MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "FFF");
sqLiteDatabase.update("student", values, "name=?", new String[]{name});
}
七.如何查找数据?
private void listStudent() {
students.clear();
MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();
Cursor cursor = sqLiteDatabase.query("student", null, null, null, null, null, null);
cursor.moveToFirst();
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
int id = cursor.getInt(cursor.getColumnIndex("id"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.e(TAG, "listStudent: " + id + "-" + name + "-" + age);
Student student=new Student(id,name,age);
students.add(student);
StudentAdapter studentAdapter=new StudentAdapter(students,this);
studentLv.setAdapter(studentAdapter);
} while (cursor.moveToNext());
}