IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Android sqlite数据库的使用(增删改查) -> 正文阅读

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

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:17:51  更:2021-10-06 12:19:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:44:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码