背景:
公司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