SQLite数据库采用了模块化设计,模块将复杂的查询过程分解为细小的工作进行处理SQLite数据库由8个独立的模块构成,这些独立模块又构成了三个主要的子系统
代码建库
自定义open()函数实现打开数据库,通过调用SQLiteOpenHelper类的getWritableDatabase()函数和getReadableDatabase()函数,来建立或打开数据库getWritableDatabase()函数用来建立或打开一个可读写的数据库实例如果调用getWritableDatabase()函数无法获得可读写的数据库实例(比如磁盘空间已满),这时可以调用getReadableDatabase()函数,建立或打开一个只读的数据库实例
SQLiteDatabase类的公有函数insert()、delete()、update()和query(),封装了执行添加、删除、更新和查询功能的SQL命令使用SQLiteDatabase类的公有函数就可以完成数据的添加、删除、更新和查询等操作
首先构造一个ContentValues实例,然后调用ContentValues实例的put()方法,将每个属性的值写入到ContentValues实例中,最后使用SQLiteDatabase实例的insert()函数,将ContentValues实例中的数据写入到指定的数据表中insert()函数的返回值是新数据插入的位置
删除数据只需要调用delete()函数,并指明表名称和删除条件即可
更新数据同样首先构造ContentValues实例,然后调用put()函数将属性值写入到ContentValues实例中,最后使用SQLiteDatabase的update()函数,并指定数据的更新条件
数据查询需要调用query()函数
查询参数
Cursor类支持在查询结果的数据集合中以多种方式移动,并能够获取数据集合的属性名称和序号
Demo:
People模型
package com.example.myapplication01;
public class People {
private int id;
private String Name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
@Override
public String toString() {
return "People{" +
"id=" + id +
", Name='" + Name + '\'' +
'}';
}
}
DBAdapter:
package com.example.myapplication01;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class DBAdapter {
private SQLiteDatabase sqLiteDatabase;
//sql命令常量
private static final String DBTable = "peopleInfo";
private static final String KEYID = "id";
private static final String KEYName = "name";
//声明打开数据库对象和参数
private DBOpenHelp dbOpenHelp;
private Context context;
private String dbName = "people.db";
public DBAdapter(Context context){
this.context = context; //定义构造函数
}
private static class DBOpenHelp extends SQLiteOpenHelper{
//创建表SQL语句
private static final String DBCreate = "create table "+ DBTable +" ("+ KEYID +
" integer primary key autoincrement, "+ KEYName + " text);";
public DBOpenHelp(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DBCreate); //执行DBCreate sql语句
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public void open(){
dbOpenHelp = new DBOpenHelp(context, dbName, null,1); //传递DBOpenHelp参数
try{
sqLiteDatabase= dbOpenHelp.getWritableDatabase(); //打开数据库
}catch (Exception e){
sqLiteDatabase = dbOpenHelp.getReadableDatabase(); //异常就只读
}
}
public void close(){ //最后需要关闭
if (sqLiteDatabase != null){
sqLiteDatabase.close();
sqLiteDatabase = null; //关闭后设置为null
}
}
//插入数据
public long insert(People people){ //传入People对象
ContentValues values = new ContentValues();
values.put(KEYName,people.getName());
return sqLiteDatabase.insert(DBTable,null,values); //返回插入操作
}
//删除操作
public long delete(long id) { //指定删除的id
return sqLiteDatabase.delete(DBTable,KEYID +"="+id ,null);
}
//更新数据
public long update(People people, long id){ //根据id更新数据
ContentValues values = new ContentValues();
values.put(KEYName, people.getName());
return sqLiteDatabase.update(DBTable, values, KEYID+"="+id,null);
}
//查询操作
public People[] query(){
//查询结果返回给cursor集合,查询整张表
Cursor cursor = sqLiteDatabase.query(DBTable,null,null,null,null,null,null,null);
int count = cursor.getCount(); //获取记录条数
if(count <=0 ){
return null; //没有数据
}else{ //读取数据
cursor.moveToFirst(); //指针移动到第一条记录
People[] peoples = new People[count]; //存放对象
for(int i = 0;i < count;i++){
peoples[i] = new People();
peoples[i].setId(cursor.getInt(0)); //获取id
peoples[i].setName(cursor.getString(cursor.getColumnIndex(KEYName))); //获取姓名
cursor.moveToNext(); //指针移动下一个记录
}
return peoples;
}
}
}
MainActivity:
package com.example.myapplication01;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button InsertBtn = findViewById(R.id.InsertBtn);
final Button QueryBtn = findViewById(R.id.queryBtn);
final EditText editText = findViewById(R.id.editText);
final TextView resultView = findViewById(R.id.ResultView);
final DBAdapter dbAdapter = new DBAdapter(this);
dbAdapter.open();
InsertBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//写入数据
People people = new People();
people.setName(editText.getText().toString());
dbAdapter.insert(people); //插入people
}
});
QueryBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//查询数据
People[] peoples = dbAdapter.query();
//显示第一条记录的Name
resultView.setText(peoples[0].getName());
}
});
}
}