如何使用 ORMLite 原始查询获取正确的布尔字段值?
How do I fetch correct boolean field values with an ORMLite raw query?
我在 Java 中将 ORMLite 与 H2 数据库一起使用,并且我有一个带有布尔字段的 class。当我使用原始查询和 DAO 的默认原始行映射器从数据库中获取此 class 的对象时,返回对象中布尔字段的值始终为 false。 (这些值在数据库中存储为类型 TINYINT
。)
这是一个例子:
public class BooleanPersistenceWithRawQueries {
@DatabaseTable
public static class George {
@DatabaseField(generatedId = true) public Integer id;
@DatabaseField public boolean curious;
}
public static void main(String[] args) throws Exception {
ConnectionSource connectionSource = new JdbcConnectionSource("jdbc:h2:mem:");
Dao<George, ?> dao = DaoManager.createDao(connectionSource, George.class);
TableUtils.createTable(connectionSource, George.class);
George g = new George();
g.curious = true;
dao.create(g);
George h = dao.queryRaw("SELECT * FROM George", dao.getRawRowMapper()).getFirstResult();
System.out.println("curious = " + h.curious + " should be " + g.curious);
}
}
输出为
curious = false should be true
我知道我可以 subclass RawRowMapperImpl
来覆盖此行为,但是是否有内置的方法来配置对象映射(例如 @DatabaseField
注释设置)以便 1
的 TINYINT
值被解析为 true
?
这是一些老问题,但可能会对某些人有所帮助。
在符号 param
中使用数据类型
@DatabaseField(dataType = DataType.BOOLEAN)
我遇到了同样的问题并在 Kamila 的帮助下解决了它,但在这种情况下他的回答是不正确的。
你必须写:
@DatabaseField(dataType=DataType.BOOLEAN_INTEGER)
我在 Java 中将 ORMLite 与 H2 数据库一起使用,并且我有一个带有布尔字段的 class。当我使用原始查询和 DAO 的默认原始行映射器从数据库中获取此 class 的对象时,返回对象中布尔字段的值始终为 false。 (这些值在数据库中存储为类型 TINYINT
。)
这是一个例子:
public class BooleanPersistenceWithRawQueries {
@DatabaseTable
public static class George {
@DatabaseField(generatedId = true) public Integer id;
@DatabaseField public boolean curious;
}
public static void main(String[] args) throws Exception {
ConnectionSource connectionSource = new JdbcConnectionSource("jdbc:h2:mem:");
Dao<George, ?> dao = DaoManager.createDao(connectionSource, George.class);
TableUtils.createTable(connectionSource, George.class);
George g = new George();
g.curious = true;
dao.create(g);
George h = dao.queryRaw("SELECT * FROM George", dao.getRawRowMapper()).getFirstResult();
System.out.println("curious = " + h.curious + " should be " + g.curious);
}
}
输出为
curious = false should be true
我知道我可以 subclass RawRowMapperImpl
来覆盖此行为,但是是否有内置的方法来配置对象映射(例如 @DatabaseField
注释设置)以便 1
的 TINYINT
值被解析为 true
?
这是一些老问题,但可能会对某些人有所帮助。 在符号 param
中使用数据类型 @DatabaseField(dataType = DataType.BOOLEAN)
我遇到了同样的问题并在 Kamila 的帮助下解决了它,但在这种情况下他的回答是不正确的。 你必须写:
@DatabaseField(dataType=DataType.BOOLEAN_INTEGER)