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

sqlite 的简介

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

Android 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) {

        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) )");

        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 sqlite数据库的使用(增删改查)
一般数据库的查看可以在Android studio的 旁边的Device File Explorer 下的data/data/app(你的项目名字)/databases 下有你刚才创建的数据库文件.db
(如何你没有发现你的Android 里没有Device File Explorer ,你可以百度,如何打开视图。)
一般如果你要看数据库具体的数据,可以把他拉出来下载一个专门的sqlite 数据库查看软件查看,如果你和我一样懒得下载安装也可以在Android studio下的Database inspactor里查看,如上图。但是这个一般要启动模拟器打开你的测序才能查看。

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


    @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

            if(count!=-1){
                Log.d("stu","插入数据库成功"+count);
            }
            else {
                Log.d("stu","插入数据库失败"+count);
            }
        }
        database.close();
    }

    @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上,然后移动游标查询数据后,记得关闭游标和数据库,否则会消耗性能。

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

Original: https://blog.csdn.net/dudubigbanana/article/details/120609844
Author: dudubigbanana
Title: Android sqlite数据库的使用(增删改查)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816294/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球