ORMLite的使用,ormlite的基本使用方式

什么是ORMLite:

ormlite,是针对数据库中的表进行操作的一个第三方,他的作用非常的简单,就是通过映射的方式将类中的一个实体类对象中的属性和数据库中的表形成映射,通过映射,也就是说通过对对象(属性)进行操作来达到对数据库中的表内容进行操作。

实现步骤:

1,导入相应的jar包;

官网:  http://ormlite.com/
一共两个包:一个是ormlite-core-4.24.jar,另一个是ormlite-android-4.24.jar
从以下网址可以下载到:  http://ormlite.com/releases/
2,创建一个帮助类继承自 OrmLiteSqliteOpenHelper,这一步和基本的sql使用方式差不多
通过两个方法核心方法达到创建和删除数据库
TableUtils.dropTable(connectionSource,"实体类名",true);
TableUtils.createTable(connectionSource,"实体类名");
个人习惯在helper中创建单例和写明创建实体对象(我们称作Dao对象)的方法,然后在外界直接调用,这个因人而异。
数据类型为:Dao<Student,Long>
3,创建实体类,在实体类中通过映射将实体类和数据库中的表进行绑定关联,
4,最后异步,在main中开始得到实体类对象,之后对实体类对象进操作即可。

基本的思路说完了,来通过代码进行更加深入的了解吧,这里添加依赖着这种就没必要贴代码了



创建帮助类:
/**
 * 数据库访问的帮助类
 */
public class MySqliteOpenHelper extends OrmLiteSqliteOpenHelper{
    private static final String DB_NAME="db_student";//数据库的名称
    private static final int DB_VERSON=1;//数据库的版本

    private static MySqliteOpenHelper helper;
    private Dao<Student,Long> studentDao;//针对student数据表操作的具体对象

    /**
     * 采用单例模式构建数据库帮助类对象  保证app中存在一个helper对象
     */
    public static MySqliteOpenHelper getInstance(Context context){
        if(helper==null){
            helper=new MySqliteOpenHelper(context);
        }
        return helper;
    }

    /**
     * 针对每个bean类创建xxDao对象处理当前的bean对应的数据表的操作
     */
    public Dao<Student,Long> getStudentDao() throws SQLException {
        if(studentDao==null){
            studentDao=getDao(Student.class);
        }
        return studentDao;
    }

    //必须定义的构造函数
    public MySqliteOpenHelper(Context context, String databaseName,
                              SQLiteDatabase.CursorFactory factory, int databaseVersion) {
        super(context, databaseName, factory, databaseVersion);
    }
//这是初始化的时候默认的数据库名字和版本号,这里为了简便直接生成,也可以在创建对象的时候生成
    public MySqliteOpenHelper(Context context){
        super(context,DB_NAME,null,DB_VERSON);
    }

    @Override
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
        try {
            //创建数据表createTable(连接对象,需要创建表的实体类字节码对象)
            TableUtils.createTable(connectionSource,Student.class);
//            TableUtils.createTable(connectionSource,xxx.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        if(newVersion>oldVersion){
            //具体的数据库更新的代码
            try {
                //dropTable(,,标示是否忽略异常)
                TableUtils.dropTable(connectionSource,Student.class,true);
                TableUtils.createTable(connectionSource,Student.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

接下下来看看实体类是如何和数据库进行关联的吧
/**
 * java Student类--数据库中的student表
这里很简单,就是简单的创建了一个学生实体类,声明了几个属性,和set,get方法,但是注意,看看是不是多了些东西呢?
 */
//DatabaseTable 标示数据库中的一张表 tableName指定表明
@DatabaseTable(tableName = "student")//此处的注解是用来说明,这个实体类和数据库进行了关联,
public class Student {
    //DatabaseField 标明数据库中的字段名(列名) generatedId=true 组建自动增长
    @DatabaseField(columnName = "_id",generatedId = true)//只要属性的上边有注解,就说明这个属性将来在操作的时候就会成为数据库表中的一个操作列,也可以说一项。
    private long _id;

    @DatabaseField(columnName = "age",dataType = DataType.INTEGER)
    private int age;

    @DatabaseField(columnName = "name",dataType = DataType.STRING)
    private String name;

    @DatabaseField(columnName = "sex",dataType = DataType.STRING)
    private String sex;

    public Student(int age, String name, String sex) {
        this.age = age;
        this.name = name;
        this.sex = sex;
    }

    public Student(){

    }

    public long get_id() {
        return _id;
    }

    public void set_id(long _id) {
        this._id = _id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}


最后就是在活动中进行操作了,在这里通过先创建helper对象,通过此对象调用单例得到dao对象,开始通过按钮逻辑,对dao对象进行操作,思路看下边代码:
/**
 * ORM 实现面向对象编程语言中不同类型的系统数据转换
 *
 * ORM Object-Relational Mapping  对象关系映射
 *   Java中对象与数据库表中的纪录进行映射
 *   实体类持久化到数据库中  数据库中表的查询纪录映射成java对象
 *
 *  数据库中的表映射成java中的类
 *  数据库表中的数据映射成java中的对象
 *
 *  数据库的访问框架 orm 利用反射机制将对象和数据库表中的纪录产生映射关系
 *  例如:插入 对象中的属性值映射成数据表中的字段值进行插入
 *
 *  OrmLite 加载连接数据库的第三方框架
 *  1.下载OrmLite相应的jar
 *  2.配置bean类
 *  3.编写数据库帮助类 ormLiteSqliteOpenHelper--对SqliteOpenHelper的封装
 *  4.执行crud操作
 */
public class MainActivity extends AppCompatActivity {
    private ListView lv;
    private MySqliteOpenHelper helper;
    private Dao<Student,Long> studentDao;
    private List<Student> list=new ArrayList<>();
    private MyBaseAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initHelper();
        initView();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main,menu);
        return true;
    }
    //刷新数据的方法
    public void refreshData(List<Student> result){
        list.clear();
        list.addAll(result);
        adapter.notifyDataSetChanged();
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_insert://插入数据
                AlertDialog.Builder builder=new AlertDialog.Builder(this);
                builder.setTitle("添加数据");
                View view= LayoutInflater.from(this).inflate(R.layout.dialog_view,null);
                builder.setView(view);
                final EditText et_name= (EditText) view.findViewById(R.id.et_name);
                final EditText et_sex= (EditText) view.findViewById(R.id.et_sex);
                final EditText et_age= (EditText) view.findViewById(R.id.et_age);
                builder.setPositiveButton("添加", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //动态的获取姓名 性别 年龄
                        String name=et_name.getText().toString().trim();
                        String sex=et_sex.getText().toString().trim();
                        String age=et_age.getText().toString().trim();
                        if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(sex)
                                && !TextUtils.isEmpty(age)){
                            int intAge=Integer.parseInt(age);
                            Student student=new Student(intAge,sex,name);
                            try {
                                //存储数据  插入数据
                                int count=studentDao.create(student);
                                if(count>0){
                                    Log.i("tag","添加成功!");
                                    //刷新界面的函数
                                    refreshData(selectAll());
                                }else{
                                    Log.i("tag","添加失败!");
                                }
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                });
                builder.setNegativeButton("取消",null);
                builder.create().show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * 查询数据库表中的所有的数据
     * @return 集合
     */
    public List<Student> selectAll(){
        try {
            //select * from student where age=18 or sex='男' order by _id desc;
//            studentDao.queryBuilder().orderBy("_id",false)
//                    .where().eq("age",18).or().eq("sex","男").query();
            //queryForAll()查询所有
            return studentDao.queryForAll();//select * from student;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 初始化view视图
     */
    public void initView(){
        lv= (ListView) findViewById(R.id.lv);
        list=selectAll();
        adapter=new MyBaseAdapter(list,this);
        lv.setAdapter(adapter);
    }
    /**
     * 初始化数据库连接
     */
    public void initHelper(){
        helper=MySqliteOpenHelper.getInstance(this);
        try {
//          studentDao=helper.getStudentDao();
            studentDao=helper.getDao(Student.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}


 
  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android的Ormlite是一个用于Android数据库操作的ORM(对象关系映射)库,它允许您将Android应用程序中的Java对象数据库表进行映射,以便轻松地存储和检索数据。 关于倒序,Ormlite库本身并没有直接支持倒序查询的功能。但是,您可以通过使用其他方法来实现倒序查询。 一种方法使用SQL查询语句来执行倒序查询。您可以使用SQLite的ORDER BY子句来按照所需字段进行倒序排序。例如,如果您要按照某个字段的倒序排序一个名为“users”的表中的数据,您可以使用以下查询语句: ```sql SELECT * FROM users ORDER BY field_name DESC; ``` 其中,“field_name”是您要按照其倒序排序的字段的名称。 另一种方法使用Ormlite的查询构建器来构建自定义查询。您可以使用QueryBuilder类来构建一个查询对象,并使用对象的orderByAsc()或orderByDesc()方法来指定排序顺序。例如: ```java QueryBuilder<User, Integer> queryBuilder = userDao.queryBuilder(); queryBuilder.orderByAsc(FIELD_NAME); // 正序排序 queryBuilder.orderByDesc(FIELD_NAME); // 倒序排序 ``` 在这段代码中,“User”是您的数据模型类,“userDao”是数据访问对象,“FIELD_NAME”是您要排序的字段的名称。使用这种方式,您可以根据自己的需求来自定义排序顺序。 需要注意的是,上述两种方法都需要对数据库操作有一定的了解,并且可能需要对您的应用程序进行一些调整以适应倒序查询的需求。 总结起来,如果您想在Ormlite中执行倒序查询,您需要使用SQL查询语句或自定义查询对象来指定排序顺序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值