OrmLiteDB数据库(依赖)的简单使用(小白成长记录)

OrmLiteDB数据库(依赖)的简单使用(本人小垃圾一个,大佬勿喷,哈哈哈哈)

这是一个简单快速的数据库操作,帮助你快速使用数据库,而不用一个个的添加SQL语句,我只说一点简单操作,其他的请大家自行探索吧

有的地方我代码里有,就不介绍了,主要不想浪费那点时间,嘻嘻,代码复制就可以使用,引用请说明一下哦!!!或者留个言表示表示也行,点个赞就更好了

在这里插入图片描述

依赖导入(我用的是这个)

 //ormlite数据库
    implementation 'com.j256.ormlite:ormlite-android:5.1'
    implementation 'com.j256.ormlite:ormlite-core:5.1'

在这里插入图片描述

准备操作

写个OrmDBHelper

自己定义一个Bean.java类

写个管理类DBManger,这个是最近养成的习惯,可以自己打算用于方便的操作

介绍一点小知识·

我们一般刚学习安卓SQL数据库时,用的是SQLiteOpenHelperSQLiteDatabase,每次的添加都需要DBHelper.getWritableDatabasenew ContentValues();等操作,这里OrmLite将更加简单的操作这些内容…

一点简单的使用语法介绍:

TableUtils.createTable(connectionSource, 你数据表头对应的类);创建数据库和表

数据表头如下:

在这里插入图片描述

@DatabaseField(...) 列的名字,就像上面的_url,_name… ,括号内可以有限定类型…(自行探索)

1.
@DatabaseField(id = true)一般的id是int类型,但如果要用String类型,就开启一下

2.
@DatabaseField 
String AABB;
相当于
@DatabaseField(columnName = "AABB")
String AABB;

@DatabaseTable(tableName = "download") 绑定创建数据表的名字

如下图:download

在这里插入图片描述

这些就够用了

开始

我这里为了测试一个下载的数据库,所以就用download.db作为名字了

写个OrmDBHelper

OrmDBHelper(Context context)构造方法

用于设置数据库的名字,和版本号

onCreate()

以前的SQLiteOpenHelper在这里创建数据表,Ormlite也是这样,但是方法有所不同

onUpgrade更新数据库操作


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;


/*
* 
* 因为我这里是直接把构造方法里的一部分内容写死了
* 所以构造那里我给改成了
* 只有一个context的构造方法
* 
* 
* 
* 
* 
* 
* */
public class OrmDBHelper extends OrmLiteSqliteOpenHelper {


   
    private static final String DB_NAME = "download.db";//数据库名字
    private static final SQLiteDatabase.CursorFactory factory = null;//默认就行,因为实际用途我不懂>_<
    private static final int databaseVersion = 1;//数据库的版本号

    
    //原来的构造方法
//    public OrmDBHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {
//        super(context, databaseName, factory, databaseVersion);
//    }


    // TODO: 2022/7/21 自己改的构造方法
    public OrmDBHelper(Context context) {
        super(context, DB_NAME, factory, databaseVersion);
    }

    //TableUtils:表工具 管理表,创建表与删除表
    @Override
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
        //ConnectionSource:优化为SqliteDatabase
        //javaBean的字节文件
        //创建表.
        try {
            TableUtils.createTable(connectionSource, MyTestBean.class);//传入Bean类(Bean类你数据库的表头)
        } catch (Exception e) {//Exception e直接我捕获所有异常
            e.printStackTrace();
        }

    }

    @Override
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        //更新表的方法
        //这里自己探索吧
    }


    /**
     * 释放资源
     */
    @Override
    public void close()
    {
        super.close();

        
    }

}

Bean类

注意:

@DatabaseTable(tableName = “download”)必须有

@DatabaseField 表头名字必须添加

get与set方法 需要就写

无参构造函数可以不用管,有参数也没事

每次表头格式都是

@DatabaseField在上

数据类型 变量名;在下!!!


import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

import java.io.Serializable;
/*
*标准如下:
* 写一个javaBean
* 无参构造函数
* get与set方法
*
* */


//@DatabaseTable(tableName = "表的名称")
//表的名称------download
@DatabaseTable(tableName = "download")
public class MyTestBean implements Serializable {

   // 配置字段@DatabaseField(columnName = "AABB"),目的是成员变量对应的列名
    //要指定一个主键,自增长,generatedID=true,写法是这样:
    //@DatabaseField(columnName = "AABB" generatedID=true)


    @DatabaseField(id = true)
//    private int id;
    private String id;
    @DatabaseField
    private String name;
    @DatabaseField
    private String url;
    @DatabaseField
    private int length;

    //枚举
    public enum DownloadState{waitting,downloading}

    @DatabaseField
    public DownloadState state;

    public MyTestBean(){

    }



    public int getLength() {
        return length;
    }

    public String getName() {
        return name;
    }

    public String getUrl() {
        return url;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    // TODO: 2022/7/19 输出对应小数据

    @Override
    public String toString() {
        return "MyTestBean{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", url='" + url + '\'' +
                ", length=" + length +
                ", state=" + state +
                '}';
    }
}

DBManger 数据库里添加,删除等操作的管理类

1.new OrmDBHelper(context)
.getDao(MyTestBean.class);必须有!!!

就像DBHelper.getWritableDatabase一样

  1. List list = this.dao.queryForAll();
    System.out.println(“添加更新后”+list);

这是自己想查看改变后的数据使用的,可以不要


import android.content.Context;
import com.j256.ormlite.dao.Dao;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;





//import com.j256.ormlite.dao.Dao;专业的操作类,是你增删改查的基础所在

/*
* API推测
* 单词学习积累一下哦:column(列) raw(行)
*
*
* createIfNotExists-----表的创建-------我们不用管
* create-----------insert
* update-----------update
* createOrUpdate---------不存在就创建,否则更新(人家Dao提供的)
* //细说一下,这个方法自带返回值--CreateOrUpdateStatus类型,可以判断状态
* createOrUpdate{
* 它手下的工具方法
* isCreated---是否是--------------没有创建过的
* isUpdated---是否是创建过后-------需要更新的
* }
*
* query-------------while (cursor.moveToNext())操作------iterator
* delete-------------delete
*
*       MyTestBean info=this.dao.queryForId(1);//更新位置
* */


public class DBManger {
    private static DBManger mInstance;
    private final Context mcontext;
    private static Dao<MyTestBean, String> dao;

    
    public DBManger(Context context) {
        this.mcontext = context;
        try {
            this.dao= new OrmDBHelper(context)
                     .getDao(MyTestBean.class);//获取控制器
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //单例模式方便多处调用
    public static DBManger getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new DBManger(context);

        }
        return mInstance;
    }


    // TODO: 2022/7/21 增 
    public synchronized void add(MyTestBean userInfo) {
        try {
            this.dao.create(userInfo);//添加数据
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public synchronized void newOrUpdate(MyTestBean userInfo){
        try {
            this.dao.createOrUpdate(userInfo);//添加 or 更新

            //查找到所有记录
            List<MyTestBean> list = this.dao.queryForAll();
            System.out.println("添加更新后"+list);


        } catch (SQLException e) {
            e.printStackTrace();
        }

    }


    // TODO: 2022/7/21 删 
    public synchronized void delete(MyTestBean userInfo) {
        try {
            this.dao.delete(userInfo);//删除数据
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    // TODO: 2022/7/21 改 
    public synchronized void update(MyTestBean userInfo) {
        try {
            this.dao.update(userInfo);//更新数据
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    // TODO: 2022/7/21 查 
    public synchronized ArrayList<MyTestBean> queryAll() {

        //查找到所有记录
        List<MyTestBean> list = null;

        try {

            list = this.dao.queryForAll();//查询所有
            System.out.println("数据"+list);


            return (ArrayList<MyTestBean>) dao.query(dao.queryBuilder().prepare());//查询所以数据,并返回一个ArrayList<MyTestBean>数组,给外部使用
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }

    }


    public synchronized MyTestBean queryById(String id) {
        //查找到所有记录
        List<MyTestBean> list = null;
        try {

            list = this.dao.queryForAll();
            System.out.println("数据"+list);


            return dao.queryForId(id);//根据id进行查询,因为我Bean类的id是String,所以传入的参数为String类型
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }






}

MainActivity.java

每次操作只需要DBManger.getInstance(this).方法名字就行了

方法里直接传入一个Bean就可以了,不用再动手写一堆东西了,方便之处也正是如此!!!!!!!!!!


import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.j256.ormlite.dao.Dao;

public class MainActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        
        //添加数据库
        for (int i = 0; i < 6; i++) {
            MyTestBean userInfo = new MyTestBean();
            userInfo.setId(String.valueOf(i));
            userInfo.setName("灵凌六android"+i);
            userInfo.setUrl("null--------链接未更新..."+i);
            userInfo.setLength(1024*i);
            if (i%2==0){
                userInfo.state = MyTestBean.DownloadState.waitting;
            }else {
                userInfo.state = MyTestBean.DownloadState.downloading;
            }
            try {
                DBManger.getInstance(this).newOrUpdate(userInfo);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        
        //查询某一条数据
        MyTestBean bean = DBManger.getInstance(this).queryById("2");
        if (bean!=null){
            System.out.println(bean);
        }




    }

}

运行Log,每次查看是一行哦!!!

在这里插入图片描述
在这里插入图片描述

SQL数据库情况

在这里插入图片描述

这次xml里什么也没写哦

在这里插入图片描述

补充

如何从模拟器里导出数据库文件

在这里插入图片描述

在这里插入图片描述

这里的5是你自己的包名!!!!!!!!!!!!!!

在这里插入图片描述

找到后鼠标右键 > Save AS...>选择自己保存的路径就行了

在这里插入图片描述

数据库查看工具,网上一大堆,自己找找,不知道的留言,给你们发我用的这个软件的名字+_+(哈哈哈哈),不为别的,俺就想收到点留言,嘻嘻

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值