Android sqlite数据库的使用(增删改查)

sqlite 的简介

对于sqlite 就是一种轻型的嵌入式的数据库,多用于手机,车机等,至于他的原理百度有很多大佬对他的详细介绍,我就不在这里累述了。
今天主要是想记录一下sqlite的详细使用,我主要是通过一个实例理解sqlite 的增删改查。

如图,这是一个简单的用户登录注册,主要就记录一下两种用户的登录注册

sqlite 的使用就是继承SQliteOpenHelper这个数据库助力类,一般写的数据库都不会对外直接进行数据的操作,这是对数据安全的保护。一般可以把他看作一个工具类,私有化构造函数,增加一个对外访问的接口。

/**
 * 数据库工具类(单例模式)
 */
public class Stu_Tea_Sqlite extends SQLiteOpenHelper{
    private static final String STU_TEA_COURSE ="stc.db";//数据库
    private static final String TEACHER ="teacher"; // 教师表
    private static final String STUDENT ="student"; //学生表
    private static final String COURSE="course"; // 课程表
    private static final String STU_COURSE ="stu_course"; //学生课程(学生选课:学生、课程号、课程名、教师、分数// )
    private static final String TEA_COURSE_WORK ="tea_work"; //作业(课程号,课程吗、作业号、作业名、作业内容)
    private static final String STU_COURSE_WORK ="stu_work"; //作业(课程号、作业号、学生、分数// )

    private static SQLiteOpenHelper instance;
    //对外接口
    public static synchronized SQLiteOpenHelper getInstance(Context context){
        if(instance ==null){
            instance =new Stu_Tea_Sqlite(context,STU_TEA_COURSE,null,2);
        }
        return instance;
    }
    //私有化构造函数
    private Stu_Tea_Sqlite(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    //一般只会执行一次,第一次创建数据库
    @Override
 public void onCreate(SQLiteDatabase sqLiteDatabase) {
        /**
         * 教师表:(职工号_Tid 、姓名T_name、密码T_pass、邮箱T_email、电话T_tel、性别T_sex、专业T_profession)
         * 规范的写法 _id
         * 主键必须时Integer
         */

        sqLiteDatabase.execSQL("create table if not exists "+ TEACHER +"(_id Integer primary key autoincrement," +"_Tid unique varchar(7) not null,"+"T_name varchar(20) not null," +
                "T_pass varchar(20) not null," + "T_email varchar(30) not null," + "T_tel varchar(15) not null,"+ "T_sex varchar(2) not null," +
                "T_profession varchar(30) )");

        /**
         * 学生表 :(学号_Sid、姓名S_name、密码S_pass、邮箱S_email、电话S_tel、性别S_sex、专业S_profession)
         */
        sqLiteDatabase.execSQL("create table if not exists "+ STUDENT +"(_id Integer primary key autoincrement,"+"_Sid unique varchar(7) not null ," +"S_name varchar(20) not null," +
                "S_pass varchar(20) not null," + "S_email varchar(30) not null," + "S_tel varchar(15) not null,"+ "S_sex varchar(2) not null," +
                "S_profession varchar(30) )");

sqlite尤其注意外键的使用,外键一定要加unique约束,不然会报错插入外键不匹配,最好还加上sqlite> PRAGMA foreign_keys = ON;打开外键的语句

然后在你的oncreate函数里创建表,创建表的调用的是sqLiteDatabase.execSQL()函数,执行的创建表的SQL语法和我们平时的语法一样。
值得主要的是,sqlite数据表的创建,他的主键必须是一个INteger类型的,而且他的规范写法是下划线开头,后面列没有严格要求,数据类型可以使用具体的也可以使用TEXT代替,因为后面都会转化为TEXT形式存储

public interface Manager_Date {
    public void createDB(Context context);
    public void StudentInsert(Student student, Context context);
    public Student StudentQuery(String ID,Context context);
    public void StudentUpdate(Student student,Context context);
    public void TeacherAdd(Teacher teacher,Context context);
    public Teacher TeacherQuery(String ID,Context context);
    public void TeacherUpdate(Teacher teacher,Context context);
    }

这里我写了一个接口主要是方便我后面功能实现数据的调用,后面数据的增删改查就直接调用接口
调用public void createDB(Context context)就可以创建一个数据库,一般只有在第一次创建的时候调用
我写了一个数据库管理类,实现数据库操作的接口

public class Manager_SQL implements  Manager_Date{

    /**
     * //初始化数据库,只会执行一次
     */
    @Override
    public void createDB(Context context){
        SQLiteOpenHelper openHelper=Stu_Tea_Sqlite.getInstance(context);
        SQLiteDatabase database=openHelper.getWritableDatabase();
    }

调用方法后,就会创建一个数据库如图:
在这里插入图片描述
一般数据库的查看可以在Android studio的 旁边的Device File Explorer 下的data/data/app(你的项目名字)/databases 下有你刚才创建的数据库文件.db
(如何你没有发现你的Android 里没有Device File Explorer ,你可以百度,如何打开视图。)
一般如果你要看数据库具体的数据,可以把他拉出来下载一个专门的sqlite 数据库查看软件查看,如果你和我一样懒得下载安装也可以在Android studio下的Database inspactor里查看,如上图。但是这个一般要启动模拟器打开你的测序才能查看。

好了数据库表创建好了,然后就可以对数据库表进行增删改查操作了。

/**
     * 学生数据插入
     * 学生表 :(学号_Sid、姓名S_name、密码S_pass、邮箱S_email、电话S_tel、性别S_sex、专业S_profession)
     */
    @Override
    public void StudentInsert(Student student,Context context) {
        SQLiteOpenHelper openHelper=Stu_Tea_Sqlite.getInstance(context);
        SQLiteDatabase database=openHelper.getWritableDatabase();
        if(database.isOpen()){
            ContentValues values=new ContentValues();
            values.put("_Sid",student.getId());
            values.put("S_name",student.getName());
            values.put("S_pass",student.getPassword());
            values.put("S_email",student.getEmail());
            values.put("S_sex",student.getSex());
            values.put("S_tel",student.getTelephone());
            values.put("S_profession",student.getProfession());

            Log.d("插入:",student.getEmail());
            Log.d("插入:",student.getPassword());
            Log.d("插入:",student.getSex());
            Log.d("插入:",student.getProfession());
            Long count=database.insert("student",null,values);base
//sql 出入形式
//database.exeSQl(insert into table(id,name,sex) value ('"ID"'+'"NAME"'+'"SEX"'));
            if(count!=-1){
                Log.d("stu","插入数据库成功"+count);
            }
            else {
                Log.d("stu","插入数据库失败"+count);
            }
        }
        database.close();
    }
    

    /**
     * 查询
     * @param ID
     * @param context
     * @return
     */
    @Override
    public Student StudentQuery(String ID,Context context){
        SQLiteOpenHelper openHelper=Stu_Tea_Sqlite.getInstance(context);
        SQLiteDatabase database=openHelper.getReadableDatabase();
        Student student=new Student();
        if(database.isOpen()){
            Cursor cursor=database.query("student",null,"_Sid like ?",new String[]{ID},null,null,null);
            if(cursor.getCount()>0){
                while (cursor.moveToNext()){
                    String id=cursor.getString(cursor.getColumnIndex("_Sid"));
                    String emailString=cursor.getString(cursor.getColumnIndex("S_email"));
                    String nameString = cursor.getString(cursor.getColumnIndex("S_name"));
                    String password = cursor.getString(cursor.getColumnIndex("S_pass"));
                    String sex=cursor.getString(cursor.getColumnIndex("S_sex"));
                    String profession=cursor.getString(cursor.getColumnIndex("S_profession"));
                    String tel=cursor.getString(cursor.getColumnIndex("S_tel"));
                    student.setId(id);
                    student.setEmail(emailString);
                    student.setName(nameString);
                    student.setPassword(password);
                    student.setTelephone(tel);
                    student.setSex(sex);
                    student.setProfession(profession);
                }
            }
            else {
                Log.d("cursor","数据不存在");
            }
            cursor.close();
        }
        database.close();
        return student;
    }
    /**
     * 修改信息
     */
    @Override
    public void StudentUpdate(Student student,Context context){
        SQLiteOpenHelper openHelper=Stu_Tea_Sqlite.getInstance(context);
        SQLiteDatabase database=openHelper.getWritableDatabase();
        if(database.isOpen()){
            ContentValues values=new ContentValues();
            values.put("S_name", student.getName());
            values.put("S_email", student.getEmail());
            values.put("S_sex", student.getSex());
            values.put("S_tel", student.getTelephone());
            values.put("profession", student.getProfession());
            database.update("student",values,"_Sid=?",new String[]{student.getId()});//参数依次:表名、包裹、条件、条件的值
        }
        database.close();
    }

对于数据的删除就是一样的操作,调用database.delete(),对指定的数据删除,值得注意的是数据库的查询操作,数据绑定在游标Cursor上,然后移动游标查询数据后,记得关闭游标和数据库,否则会消耗性能。

第一次写文章记录总结的知识点,有不足的地方,或者有什么更好的写法、优化的欢迎指正。

  • 3
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很高兴回答你的问题。对于 Android SQLite 增删改查,请参考以下代码示例: 1. 添加数据: ```java //打开或创建数据库 SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,null); //创建一个ContentValues对象 ContentValues values = new ContentValues(); values.put("name","张三"); values.put("age",20); //插入数据到表中 db.insert("student",null,values); //关闭数据库 db.close(); ``` 2. 删除数据: ```java //打开或创建数据库 SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,null); //删除姓名为张三的学生的数据 db.delete("student","name=?",new String[]{"张三"}); //关闭数据库 db.close(); ``` 3. 修改数据: ```java //打开或创建数据库 SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,null); //创建一个ContentValues对象 ContentValues values = new ContentValues(); values.put("age",21); //修改姓名为张三的学生的数据 db.update("student",values,"name=?",new String[]{"张三"}); //关闭数据库 db.close(); ``` 4. 查询数据: ```java //打开或创建数据库 SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,null); //查询所有学生的姓名和年龄信息 Cursor cursor = db.query("student",new String[]{"name","age"},null,null,null,null,null); //循环遍历结果集 while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); //处理结果集数据 } //关闭游标和数据库 cursor.close(); db.close(); ``` 希望以上内容能够帮助你解决问题,如果还有不懂的地方,欢迎继续提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值