Android基础(九):SQLite

10 篇文章 0 订阅

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

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());
            }
        });
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值