一、SQLite的定义
- SQLite数据库存储是Android系统提供的数据存储方式
- 为嵌入式设备设计的轻量级的数据库
- 占用资源低,只需要几百k的内存
- 支持标准的SQL语法,遵循数据库的ACID(增删改查)事务
- 无需安装,无需用户名密码就可登录
二、SQLite的使用步骤
- 首先新建一个类继承SQLiteOpenHelper;
- 实现其构造方法;
- 重写onCreate方法;
注意点:此方法只会在第一次创建时执行即只会执行一次
此方法有一个SQLiteDatabase参数对象,通过调用execSQL方法执行建表SQL语句
- 重写onUpgrade方法;
注意点:此方法用来升级数据库表
需要增加字段或表时,传递进来一个新的数据库版本号,就会触发此方法
- 实例化SQLiteOpenHelper的子类对象
- 调用getReadableDatabase方法或者getWritableDatabase方法
三、SQLite使用实例(以修改学生信息为例)
1.首先在layout布局文件里创建一些需要使用的控件
<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="com.example.myapplication13.InsertActivity">
<EditText
android:id="@+id/insert_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入姓名"/>
<EditText
android:id="@+id/change_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="修改的姓名"/>
<Button
android:id="@+id/insert_btn_insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入"/>
<Button
android:id="@+id/insert_btn_check"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询"/>
<Button
android:id="@+id/change_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除"/>
</LinearLayout>
2.在主体类里定义这些控件,绑定ID,并且对Button控件设置监听
public class InsertActivity extends AppCompatActivity implements View.OnClickListener {
private EditText insertET;
private EditText changeET;
private Button insertBtn;
private Button checkBtn;
private Button changeBtn;
private Button deleteBtn;
bindId();
private void bindId() {
insertET = findViewById(R.id.insert_et);
insertBtn = findViewById(R.id.insert_btn_insert);
changeET=findViewById(R.id.change_et);
checkBtn = findViewById(R.id.insert_btn_check);
changeBtn=findViewById(R.id.change_btn);
deleteBtn=findViewById(R.id.delete_btn);
insertBtn.setOnClickListener(this);
checkBtn.setOnClickListener(this);
changeBtn.setOnClickListener(this);
deleteBtn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
tips:因为Button控件较多,所以设置了全局监听事件
3.新建一个类来继承SQLiteOpenHelper方法,并且实现onCreate和onUpgrade方法。建一个表语句,并且在onCreate方法里用execSQL将建的表语句添加进去
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by 华硕 on 2018/3/20.
*/
public class DBHelper extends SQLiteOpenHelper {
//建表语句
private String sql = "create table student(" +
"id integer primary key autoincrement not null," +
"age integer," +
"name text not null," +
"score real" +
")";
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据表结构语句
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
//创建数据库表结构
}
}
tips:由于onUpgrade是更新升级数据库表的,所以暂且不在里面写程序
4.回到主体类,实例化SQLiteOpenHelper对象,即dbHelper
private DBHelper dbHelper;
dbHelper=new DBHelper(this,"mydb",null,1);
5.在点击事件方法里来实现插入,查询,修改,删除四个方法
插入
switch (view.getId()) {
case R.id.insert_btn_insert:
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",insertET.getText().toString());
sqLiteDatabase.insert("student",null,values);
break;
查询
case R.id.insert_btn_check:
SQLiteDatabase sqLiteDatabase1=dbHelper.getReadableDatabase();
Cursor cursor=sqLiteDatabase1.query("student",null,null,null,null,null,null);
cursor.moveToFirst();
do {
String name=cursor.getString(cursor.getColumnIndex("name"));
Log.e("MAIN",name);
}while (cursor.moveToNext());
cursor.close();
break;
修改
case R.id.change_btn:
String name=insertET.getText().toString();
String newName=changeET.getText().toString();
SQLiteDatabase sqLiteDatabase2=dbHelper.getReadableDatabase();
ContentValues values1=new ContentValues();
values1.put("name",newName);
sqLiteDatabase2.update("student",values1,"name=?",new String[]{name});
break;
删除
case R.id.delete_btn:
SQLiteDatabase sqLiteDatabase3=dbHelper.getReadableDatabase();
String name1=insertET.getText().toString();
sqLiteDatabase3.delete("student","name=?",new String[]{name1});
break;
笔芯!