将房间数据库导出到json文件

问题描述 投票:0回答:3

是否可以将所有房间数据库的所有表、条目导出到 json 文件?我看到了一些用 SQLite 完成的example,但是 Room 数据库怎么样?

android sqlite android-sqlite android-room
3个回答
4
投票

您可以根据需要将 Room 实体对象传递给 JSON 生成器。如果你想检索一堆实体并将它们写入 JSON,你可以这样做。

换句话说,您可以使用 JSON 生成器将

Dog
Cat
对象的数据写入 JSON。
Dog
Cat
对象来自何处——Room、Retrofit、Realm 等——无关紧要。

实施导出范围(“所有房间数据库,所有表格,条目”)由您决定。


2
投票

如果您了解如何将表格从 Room 数据库导出到 JSON,将会很有帮助。让我们看看如何去做。

第 1 步:为房间数据库创建 Model

    @Entity(tableName = "students")
    public class Student{
        @PrimaryKey(autoGenerate = true)
        private int id;
        @ColumnInfo(name = "std_name")
        private String name;
        public Student(int id, String name){
            this.id = id;
            this.name = name;
        }
        @Ignore
        public Student(String name){
            this.name = name;
        }
        public int getId() {
            return id;
        }
        public String getName() {
            return name;
        }
     }

第 2 步:为房间数据库创建数据访问对象(DAO)

@Dao
public interface StudentDAO {
    @Query("select * from students")
    List<Student> getStudents();

    @Insert
    public void insert(Student student);

    // Other CRUD methods
    // ..........
}

第三步:现在创建房间数据库

@Database(entities = { Student.class }, version = 1, exportSchema = false)
public abstract class StudentDatabase extends RoomDatabase {
    private static final String DB_NAME ="StudentDb";
    private static StudentDatabase stdInstance;
    public abstract StudentDAO stdDAO();    

    public synchronized static StudentDatabase getInstance(final Context context) {
        if (stdInstance == null) {
            stdInstance = Room.databaseBuilder(context, StudentDatabase.class, DB_NAME)
                                        .allowMainThreadQueries().build();
        }
        return stdInstance;
    }
}

第 4 步:将 学生表 从 Room 数据库导出为 JSON

// Create reference variables in your Activity
private List<Student> stdList;
private StudentDatabase stdDatabase;

private void exportJSON(){
    Completable.fromAction(new Action() {
        @Override
        public void run() throws Exception {
           // stdDatabase.stdDAO().getStudents();
        }
    }).observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(new CompletableObserver() {
                @Override
                public void onSubscribe(Disposable d) {
                }

                @Override
                public void onComplete() {
                    stdList = stdDatabase.stdDAO().getStudents();
                    Gson gson = new Gson();
                    Type type = new TypeToken<List<Student>>(){}.getType();
                    String stdJson = gson.toJson(stdList, type);

                    // Call function to write file to external directory
                    writeToStorage(getApplicationContext(), "StudnetJson", stdJson)
                }

                @Override
                public void onError(Throwable e) {
                    // Show error message
                }
            });
    }

//Create a Method in your Activity
public void writeToStorage(Context mContext, String fileName, String jsonContent){      
    File file = new File(mContext.getFilesDir(),"exportStudentJson");
    if(!file.exists()){
        file.mkdir();
    }
    try{
        File mFile = new File(file, fileName);
        FileWriter writer = new FileWriter(mFile);
        writer.append(jsonContent);
        writer.flush();
        writer.close();

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

    }
}

不懂的也请让我写评论

注意:以后我会为这个问题创建一个GitHub项目。谢谢


0
投票

谢谢你,如果导入(Json到房间),请

© www.soinside.com 2019 - 2024. All rights reserved.