【问题标题】:How to make a Table with room library in android studio using Java?如何使用 Java 在 android studio 中制作带有房间库的表格?
【发布时间】:2021-12-17 04:49:02
【问题描述】:

我想尝试用 Java(不在 Kotlin 中)的 android studio 中制作一个带有 Room Library 的表格来容纳 2 列。

这里的问题是我的数据是这样的:

Year Dowry
1317 0.004
1318 0.004
1319 0.004
1320 0.008
1400 0.255

为此,我创建了一个名为 Data 的类,并且我这样评价它:

    @Entity(tableName = "tbl_data")
public class Data {
    @PrimaryKey(autoGenerate = true)
    private long id;
    private int year;
    private int dowry;
 
    public Data(int year, int dowry) {
        this.year = year;
        this.dowry = dowry;
    }


    public long getId() {
        return id;
    }

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

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getDowry() {
        return dowry;
    }

    public void setDowry(int dowry) {
        this.dowry = dowry;
    }
}

然后我做了一个这样的数据库:

@Database(version = 1 , exportSchema = false , entities = {Data.class} )
public abstract class AppDatabase extends RoomDatabase   {
        private static AppDatabase appDatabase;


    public static AppDatabase getAppDatabase(Context context) {
            appDatabase= Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class,
                    "db_app")
                    .allowMainThreadQueries()
                    .build();
        return appDatabase;
    }

    public abstract DataDao getDataDao();

}

如何将数据添加到我的 data.class AKA "tbl_data" 中?

【问题讨论】:

    标签: java android mysql android-room


    【解决方案1】:

    在使用@Dao 注释的DataDao 接口(或抽象类)中,您可以拥有。

    @Insert
    long insert(Data data);
    

    然后您可以插入单独的行,例如

        db = AppDatabase.getAppDatabase(this);
        dao = db.getDataDao();
        dao.insert(new Data(1317,0004));
        dao.insert(new Data(1318,0004));
        dao.insert(new Data(1319,0004));
    

    结果是(第一次运行时):-

    但是

    使用int 作为嫁妆不适合十进制数字,因此使用 0004(等于 4)。

    因此,您可能希望将 private int dowry; 更改为 private double dowry;同时更改相应 getter 和 setter 的代码

    多次/批量插入

    如果您添加(到 DataDao):-

    @Insert
    long[] insert(Data ... data);
    

    然后您可以进行批量/多次插入,例如:-

    dao.insert(new Data(1317,0004), new Data(1318,0004),new Data(1319,0004));
    

    long 或 long[] 是插入的一行或多行的 id(如果未插入该行,则为 -1)。

    以下是批量插入的示例,包括查询结果:-

        Data[] anotherArrayOfDatas = new Data[100];
        for (int i=0; i < 100; i++) {
            anotherArrayOfDatas[i] = new Data(1300 + i,0.004 + i);
        }
        long[] insertedIdList = dao.insert(anotherArrayOfDatas);
        long insertedOk =0;
        long notinserted = 0;
        for (int i = 0; i < insertedIdList.length; i++) {
            if (insertedIdList[i] < 0) {
                notinserted++;
            } else {
                insertedOk++;
            }
        }
        Log.d("INSERTED","Number of inserts was " + insertedOk + ". Number not inserted was " + notinserted);
    

    以上运行后,日志包括:-

    D/INSERTED: Number of inserts was 100. Number not inserted was 0
    

    数据库中的数据看起来像:-

    至于处理字符串{1317 | 0.004, 1318 | 0.004, 1319 | 0.004, 1320 | 0.008, ... 1400 | 0.255 } 用于输入。

    然后(假设 ... 以此类推)并因此被删除,那么您需要:-

    1. 去掉开头和结尾的大括号。
    2. 在每个,处将剩余的字符串分割成一个数组
    3. 对于在 | 处拆分的每个数组删除空格,然后
    4. 从 2 个部分创建一个 Data 对象
    5. 结果应该是一个可以插入的数据数组。

    举个例子:-

    首先是的,另一个 dao 已使用 ArrayList 添加到批量插入中:-

    @Insert
    long[] insert(ArrayList<Data> dataArrayList);
    

    添加了以下代码:-

        String datain = "{1317 | 0.004, 1318 | 0.004, 1319 | 0.004, 1320 | 0.008,1400 | 0.255 }";
        ArrayList<Data> newDatas = new ArrayList<>();
        String x = datain.substring(1,datain.length() - 1);
        String[] split1 = x.split(",");
        for (String s: split1) {
            s = s.replace(" | ","~");
            String[] parts = s.split("~");
            if (parts.length == 2) {
                try {
                    newDatas.add(new Data(Integer.parseInt(parts[0].trim()), Double.parseDouble(parts[1].trim())));
                }
                catch (Exception e) {
                }
            }
        }
        dao.insert(newDatas);
    

    现在数据库包括:-

    【讨论】:

    • 非常感谢 mike 先生,我已经尝试了所有代码,并且每个代码都为我工作。
    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多