android - ORMLite 查询外键

标签 android database foreign-keys ormlite

我有两个类(class)

列表

@DatabaseTable(tableName = "loginsList")
public class LoginsList {

    @DatabaseField(columnName = "loginListID", generatedId = true)
    private int loginListID;
    @DatabaseField(columnName = "listName")
    private String listName;
    @DatabaseField(columnName = "listDescription")
    private String listDescription;
    @DatabaseField(columnName = "current")
    private boolean current;
    @DatabaseField(columnName = "sent")
    private boolean sent;

登录

@DatabaseTable(tableName = "login")
public class Login {
    @DatabaseField(columnName = "loginID", generatedId = true)
    private int loginID;
    @DatabaseField(columnName = "user", foreign=true)
    private User user;
    @DatabaseField(columnName = "loggedIn")
    private boolean loggedIn;
    @DatabaseField(columnName = "loginTime")
    private long loginTime;
    @DatabaseField(columnName = "logoutTime")
    private long logoutTime;
    @DatabaseField(columnName = "loginsList", foreign = true)
    private LoginsList loginsList;

我使用 ORMLite 作为数据库。我想知道如何获取列表的所有登录信息?我试过这样

tempLoginList = loginDao.queryForEq("loginsList", list);

其中 list 是 LoginsList 类型,它是我想要获取所有登录名的列表,但它不起作用。如何使用查询生成器来完成?

最佳答案

tempLoginList = loginDao.queryForEq("loginsList", list);

那应该没问题。这里有几件事需要检查,可能会妨碍您。

  • ORMLite 在Login 中存储一个int,它是LoginsList 中的loginListID 字段。当您将列表与 Login 相关联时,它必须已经在数据库中创建,因此它的 ID 已经生成。

  • 如果您查看查询日志(使用类似以下 log4j 属性的内容打开 logging,您应该会看到关联的查询。您应该能够看到 login id正在查询的字段。您需要确保它是正确的。

    log4j.logger.com.j256.ormlite=DEBUG
    # to enable logging of arguments to all of the SQL calls
    # uncomment the following lines
    log4j.logger.com.j256.ormlite.stmt.mapped.BaseMappedStatement=TRACE
    #log4j.logger.com.j256.ormlite.stmt.mapped.MappedCreate=TRACE
    #log4j.logger.com.j256.ormlite.stmt.StatementExecutor=TRACE
    

我有很多单元测试,但不是专门围绕 dao.queryForEq(...) 和外部字段进行的。我只是将它们添加到代码库中,它们工作正常。这是我的日志输出,可能有帮助:

[DEBUG] BaseMappedStatement insert data with statement 'INSERT INTO `foo` (`val` ,`equal` ,`null` ) VALUES (?,?,?)' and 3 args, changed 1 rows
[TRACE] BaseMappedStatement insert arguments: [1231231, 0, null]
[DEBUG] BaseMappedStatement assigned id '1' from keyholder to 'id' in Foo object
[DEBUG] BaseMappedStatement insert data with statement 'INSERT INTO `foreign` (`foo_id` ) VALUES (?)' and 1 args, changed 1 rows
[TRACE] BaseMappedStatement insert arguments: [1]
[DEBUG] BaseMappedStatement assigned id '1' from keyholder to 'id' in Foreign object
[DEBUG] StatementBuilder built statement SELECT * FROM `foreign` WHERE `foo_id` = 1 
[DEBUG] BaseMappedStatement prepared statement 'SELECT * FROM `foreign` WHERE `foo_id` = 1 ' with 0 args
[DEBUG] SelectIterator starting iterator @1781793025 for 'SELECT * FROM `foreign` WHERE `foo_id` = 1 '
[DEBUG] SelectIterator closed iterator @1781793025 after 1 rows
[DEBUG] StatementExecutor query of 'SELECT * FROM `foreign` WHERE `foo_id` = 1 ' returned 1 results

关于android - ORMLite 查询外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13048127/

相关文章:

java - 如何使用 StickerView 撤消和重做功能?

c# - 现有数据库的 Entity Framework 代码优先迁移策略

database - 如何确保文档中的字段在 ArangoDB 中是唯一的?

mysql - 创建复杂的 MySQL 查询

android - 是否可以通过编程方式在后台进行调用?

android - 如何在 youtubeApi v3 中从 VideoId android 获取 youtube 视频的评论?

php - Yii2 以编程方式迁移命令

mySQL:什么阻止了我的外键约束?

创建外键的 MySQL 语法

android - 在 Android Touch 事件中看不到点击涟漪效应