一、SQLite存储方式
是安卓提供的一种轻量级的数据库(不需安装的内置数据库),是一种数据存储方式之一,一般用于数据量大,数据结构复杂的情况下
二、三种常用数据类型
text 文本型/字符型
integer 整型,自增长,主键
real 浮点型
三、创建一个表格的方法
例如创建一个student表格
create table Student
(
Id integer primary key(主键) autoincrement(自增长)no null,
Name text(50),
Height real,
age Integer
);
四、如何使用SQLite
- 创建数据库和数据表
- 增删改查数据
五、创建数据库和数据表的步骤:
- 新建类继承SQLiteOpenHelper
- 实现构造方法
- 重写onCreatr方法
- 重写onUpgrage方法
- 实例化SQLiteOpenHelper的子类对象
- 调用getReadableDatabase方法或getWritableDatabase
六、定义
1、SQLiteOpenHelper类:
- 是一个数据库辅助类,管理数据库的创建和版本,通过继承这个类,实现他的一下方法来对数据库进行一些操作。
- 是一个抽象类,子类需要重写onCreate和onUpgrade抽象方法,并添加一个构造方法
2、SQLiteOpenHelper构造方法:
1.父类中未提供默认构造方法,必须显示调用父类的构造方法
2. 需要传递创建的数据库名称以及数据库版本号
构造方法参数:
SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version)
- Context context:上下文环境
- String name:数据库名
- CursorFactory factory:允许开发者查询数据的时候返回一个自定义的Cursor,一般传入null
- int version:当前的数据库的版本号,可用于对数据库进行升级操作
3、SQLiteOpenHelper的常用方法:
oncreate方法
- 此方法只会在第一次创建时执行,只会执行一次
- 此方法中使用标准的SQL语句创建数据表
- 通过调用execSQL方法执行建表SQL语句
onUpgrade方法
- 此方法用来升级数据库表结构时触发
- 当需要增加表字段或增加表是,传递一个新的数据库版本号(版本更新时使用)
- 此方法中可以重新更新现数据表结构
4、SQLiteDatabase对象的方法:
- SQLiteOpenHelper子类方法:
实例化SQLiteOpenHelper子类对象,创建数据库和数据库表 - SQLiteDatabase对象:
数据库操作对象,用来连接数据库,并可以对数据表进行增删改查 - getReadableDatabase方法:
以只读方式打开数据库,一般在查询时使用 - getWritableDatabase方法:
以读写方式打开数据库,一般在增删改时使用
七、SQLite存储方式的运用实例
新建一个student表,插入数据,显示数据
步骤:
- 创建视图列表,绑定ID,监听按钮插入以及显示
新建类MyDBHelper继承SQLiteOpenHelper
建表语句private String sql = "create Table Student(" + "id integer primary key autoincrement not null," + "name text," + "age integer" + ")";
实现构造方法,重写onCreate和onUpgrade方法
//创建数据表结构语句 @Override public void onCreate(SQLiteDatabase db) { db.execSQL(sql); } //数据库版本更新时 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
实现增操作
//增 private void insert(){ //获得SQLiteDatabase对象,读写模式 sqlbd=myDBHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("name",nameEt.getText().toString()); //执行插入操作 sqlbd.insert("student",null,values); }
实现查操作
//查 private void show(){ //得到数据库对象 sqlbd=myDBHelper.getReadableDatabase(); //创建游标 Cursor mcursor=sqlbd.query("student",null,null,null,null,null,null); //游标置顶 mcursor.moveToFirst(); //遍历,当游标还能移动时,不断接收数据库里的内容 do{ String name=mcursor.getString(mcursor.getColumnIndex("name")); Log.e("NAME",name); }while (mcursor.moveToNext()); mcursor.close();//关闭游标 }
实现改操作
private void modify(){ String name=nameEt.getText().toString(); String newname=name2Et.getText().toString(); sqlbd=myDBHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("name",newname); //第三个参数是查询条件where //第四个参数是修改的值,由一开始的name的占位符的填充长度决定 //三四两个参数相互对应 //如果第三四个参数都为null,那就将每条记录都改掉 sqlbd.update("student",values,"name=? and id>?",new String[]{name,"6"}); }
实现删操作
private void delete(){
sqlbd=myDBHelper.getWritableDatabase();
String name=nameEt.getText().toString();
//第二个参数是查询条件
//第三个参数是第二个参数的占位符的填充值
sqlbd.delete("student","name=?",new String[]{name});
}
八、代码演示
视图代码:
<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.homework.activity.sqliteactivity.SQLiteActivity">
<EditText
android:id="@+id/name_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入学生姓名"/>
<EditText
android:id="@+id/name2_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="修改学生信息"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/search_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="新增"/>
<Button
android:id="@+id/modify_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="修改"/>
<Button
android:id="@+id/take_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="显示"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="删除"/>
</LinearLayout>
</LinearLayout>
MYDBHelper类代码
//创建数据库表
public class MyDBHelper extends SQLiteOpenHelper {
//建表语句
private String sql = "create Table Student(" +
"id integer primary key autoincrement not null," +
"name text," +
"age integer" +
")";
public MyDBHelper(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 oldVersion, int newVersion) {
}
}
SQLiteActivity类代码:
public class SQLiteActivity extends AppCompatActivity implements View.OnClickListener{
private EditText nameEt;
private Button insertBtn;
private Button takeBtn;
private EditText name2Et;
private Button modifyBtn;
private Button deleteBtn;
private MyDBHelper myDBHelper;
private SQLiteDatabase sqlbd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sqlite);
bindID();
myDBHelper=new MyDBHelper(this,"demodb",null,1);
}
private void bindID() {
nameEt=findViewById(R.id.name_et);
insertBtn=findViewById(R.id.search_btn);
takeBtn=findViewById(R.id.take_btn);
name2Et=findViewById(R.id.name2_et);
modifyBtn=findViewById(R.id.modify_btn);
deleteBtn=findViewById(R.id.delete_btn);
nameEt.setOnClickListener(this);
insertBtn.setOnClickListener(this);
takeBtn.setOnClickListener(this);
name2Et.setOnClickListener(this);
modifyBtn.setOnClickListener(this);
deleteBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.search_btn:
insert();
break;
case R.id.take_btn:
show();
break;
case R.id.modify_btn:
modify();
break;
case R.id.delete_btn:
delete();
break;
default:
break;
}
}
//增
private void insert(){
//获得SQLiteDatabase对象,读写模式
sqlbd=myDBHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",nameEt.getText().toString());
//执行插入操作
sqlbd.insert("student",null,values);
}
//查
private void show(){
//得到数据库对象
sqlbd=myDBHelper.getReadableDatabase();
//创建游标
Cursor mcursor=sqlbd.query("student",null,null,null,null,null,null);
//游标置顶
mcursor.moveToFirst();
//遍历
do{
String name=mcursor.getString(mcursor.getColumnIndex("name"));
Log.e("NAME",name);
}while (mcursor.moveToNext());
mcursor.close();//关闭游标
}
//改
private void modify(){
String name=nameEt.getText().toString();
String newname=name2Et.getText().toString();
sqlbd=myDBHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",newname);
//第三个参数是查询条件where
//第四个参数是修改的值
sqlbd.update("student",values,"name=? and id>?",new String[]{name,"6"});
}
//删
private void delete(){
sqlbd=myDBHelper.getWritableDatabase();
String name=nameEt.getText().toString();
//第二个参数是查询条件
//第三个参数是第二个参数的占位符的填充值
sqlbd.delete("student","name=?",new String[]{name});
}