gpt4 book ai didi

java - 从自定义对象到 sqlite 行的动态转换

转载 作者:行者123 更新时间:2023-11-29 21:49:23 25 4
gpt4 key购买 nike

我有一个电影表,它有很多列和一个类,它代表具有相同顺序的相同列/字段类型的表(一个 int 用于 id,所有其他都是字符串)我有这段代码试图插入一个将对象 movie 中的电影记录到数据库中。我遇到一个问题,说方法 put 不能接受那个组或参数 (String, capture#2-of ?) 有什么比那来解决我的问题?
编辑:你能解释一下为什么我错了吗?

ContentValues contentValues = new ContentValues();
Field[] fields = movie.getClass().getFields();
for(int i = 0; i < fields.length; i++)
{
contentValues.put(allColumns[i], fields[i].getType().cast(fields[i].get(movie)));
}

最佳答案

fields[i].getType().cast(fields[i].get(movie)) 返回类型 Object 并且 put(...) 没有重载接受 Object作为它的第二个参数。

当使用内容值 add(...) 方法时,您应该首先将您的值转换为基本类型,例如 int、String、boolean、long 或 byte[]

您可以将数据序列化为 blob(作为字节数组)或其他一些表示形式,例如字符串。

编辑:请查看评论,似乎 Field.getType() 返回一个通用类,您需要在调用 cast() 之前对其进行转换,即:-

Class<String> fieldType = (Class<String>) fields[i].getType();

但是这不会帮助你走得更远,因为你需要预先知道类型,你可以做的是这样的:

ContentValues contentValues = new ContentValues();
Field[] fields = movie.getClass().getFields();
for(int i = 0; i < fields.length; i++)
{
Class<?> fieldType = fields[i].getType();

if(String.class.isAssignableFrom(fieldType)) {
contentValues.put(allColumns[i], (String) fields[i].get(movie));
} else if(Integer.class.isAssignableFrom(fieldType)) {
contentValues.put(allColumns[i], (Integer) fields[i].get(movie));
}
...and so on for all types
}

关于java - 从自定义对象到 sqlite 行的动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14851754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com