Android学习--SQLite存储方式(数据库)

一、SQLite存储方式

是安卓提供的一种轻量级的数据库(不需安装的内置数据库),是一种数据存储方式之一,一般用于数据量大,数据结构复杂的情况下

二、三种常用数据类型

text 文本型/字符型
integer 整型,自增长,主键
real 浮点型

三、创建一个表格的方法

例如创建一个student表格

create table Student
(
Id integer primary key(主键)  autoincrement(自增长)no null,
Name text(50),
Height real,
age Integer
);

四、如何使用SQLite

  • 创建数据库和数据表
  • 增删改查数据

五、创建数据库和数据表的步骤:

  1. 新建类继承SQLiteOpenHelper
  2. 实现构造方法
  3. 重写onCreatr方法
  4. 重写onUpgrage方法
  5. 实例化SQLiteOpenHelper的子类对象
  6. 调用getReadableDatabase方法或getWritableDatabase

六、定义

1、SQLiteOpenHelper类:

  • 是一个数据库辅助类,管理数据库的创建和版本,通过继承这个类,实现他的一下方法来对数据库进行一些操作。
  • 是一个抽象类,子类需要重写onCreate和onUpgrade抽象方法,并添加一个构造方法

2、SQLiteOpenHelper构造方法:

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、SQLiteOpenHelper的常用方法:

oncreate方法

  1. 此方法只会在第一次创建时执行,只会执行一次
  2. 此方法中使用标准的SQL语句创建数据表
  3. 通过调用execSQL方法执行建表SQL语句

onUpgrade方法

  1. 此方法用来升级数据库表结构时触发
  2. 当需要增加表字段或增加表是,传递一个新的数据库版本号(版本更新时使用)
  3. 此方法中可以重新更新现数据表结构

4、SQLiteDatabase对象的方法:

  • SQLiteOpenHelper子类方法:
    实例化SQLiteOpenHelper子类对象,创建数据库和数据库表
  • SQLiteDatabase对象:
    数据库操作对象,用来连接数据库,并可以对数据表进行增删改查
  • getReadableDatabase方法:
    以只读方式打开数据库,一般在查询时使用
  • getWritableDatabase方法:
    以读写方式打开数据库,一般在增删改时使用

七、SQLite存储方式的运用实例

新建一个student表,插入数据,显示数据

步骤:

  1. 创建视图列表,绑定ID,监听按钮插入以及显示
  2. 新建类MyDBHelper继承SQLiteOpenHelper
    建表语句

    private String sql = "create Table Student(" +
                "id integer primary key autoincrement not null," +
                "name text," +
                "age integer" +
                ")";
  3. 实现构造方法,重写onCreate和onUpgrade方法

    //创建数据表结构语句
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(sql);
        }
    
        //数据库版本更新时
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
  4. 实现增操作

    //增
        private void insert(){
            //获得SQLiteDatabase对象,读写模式
            sqlbd=myDBHelper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("name",nameEt.getText().toString());
            //执行插入操作
            sqlbd.insert("student",null,values);
        }
  5. 实现查操作

    //查
        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();//关闭游标
        }
  6. 实现改操作

        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"});
        }
    
  7. 实现删操作

 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});
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值