sqlite数据库和room共同使用

背景:

公司Android项目原来使用的是sqlite数据库,现在要使用room数据库。但是使用数据库的地方很多,一下子不能完全转换,只能慢慢转换。所以考虑使用room和sqlite同时操作数据库。

代码中数据库文件的位置room和sqlite要设置的一致,我都放在sd卡上了。

room和sqlite想操作同一个数据库,要注意创建的时候数据库版本要一致;设置的表里的字段要一致。

  • sqlite的数据库创建
private void CreateAnime(SQLiteDatabase db) {
        String sqlString = "CREATE TABLE IF NOT EXISTS Anime ("
                + "id INTEGER NOT NULL PRIMARY KEY, "
                + "name varchar(100), "
                + "type varchar(100), "
                + "playDate varchar(100), "
                + "episode INTEGER )";
        db.execSQL(sqlString);
    }
  • room数据库的entity
@Entity
public class Anime {
    /**
     * 动漫名
     * 如果是字符串做主键,记得加@NonNull,不然会报错
     */
    @PrimaryKey(autoGenerate = true)
    @NonNull
    private Integer id;

    private String name;
    /**
     * 动漫类型
     */
    private String type;
    /**
     * 放送时间
     */
    private String playDate;
    /**
     * 集数
     */
    private Integer episode;

	get和set方法
	······
}

数据类型要一致,varchar可以对应room里的String类型。主键上注意int和Integer是不一样的,非空判断要一致。

对数据库操作示例:
sqlite插入数据

binding.btnSqlite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DAO sqlHelper = new DAO(MainActivity.this);
                List<String> tempList = new ArrayList<String>();
                String deleteSQL = "INSERT INTO Anime VALUES(NULL,'青春猪头少年不会梦到兔女郎学姐','奇幻','2019','12')";
                tempList.add(deleteSQL);
                sqlHelper.Transaction(tempList);
            }
        });

room数据库插入数据

binding.btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //增加一条动漫记录
                new Thread(new Runnable() {
                    @Override
                    public void run() {
	                    Anime anime = new Anime();
				        anime.setName("青春猪头少年不会梦到兔女郎学姐" + new Random().nextInt(100));
				        anime.setType("奇幻&恋爱");
				        anime.setPlayDate("2018-10");
				        anime.setEpisode(13);
                        long s = animeDao.insertOneAnime(anime);
                        LogUtils.v("" + s);
                    }
                }).start();

            }
        });

数据库查询

        binding.btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                StringBuilder builder = new StringBuilder();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        List<Anime> animeList = animeDao.getAllAnime();
                        for (Anime anime : animeList) {
                            builder.append(anime.getName());
                            LogUtils.v(anime.getName() + anime.getEpisode() + "---" + animeList.size());
                        }
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                binding.tvShow.setText(builder.toString());
                            }
                        });
                    }
                }).start();


            }
        });

demo地址:
https://gitee.com/hjqjl/wh-demo

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值