当前位置: 首页 > 知识库问答 >
问题:

jooq mysql选择唯一的键,不考虑字段名

滑弘扬
2023-03-14

我正在编写一个方法,将一条记录插入或更新到mysql表中,只有当字段“sample_time”大于表中当前记录的这个值时,才会进行更新。下面是我现在想做的事情。

 public <R extends Record> void upsertRecord(Table<R> table, R record) {
    Connection conn = getConnection();
    DSL.using(getConfiguration()).transaction(configuration -> {
        try (DSLContext dslContext = DSL.using(configuration)) {

            R old = // select with unique keys of table


            // something like if (old.get("update_time) < record.get("update_time"))
                dslContext.insertInto(table).set(record).onDuplicateKeyUpdate().set(record).execute();
                conn.commit();
           // }   
        } catch (SQLException e) {
            // TODO
        } finally {
            closeConnection(conn);
        }
    });
}

但是我不知道如何通过记录的唯一键来选择,而不考虑确切的字段名称或字段编号。所以我的问题是:

  1. 我如何实现“按记录的唯一键选择,而不考虑确切的字段名称或字段编号”
  2. 或者,我如何在jooq中使用条件为重复更新的条件

提前感谢您的帮助!

共有1个答案

公冶高义
2023-03-14

您可以通过Table.getPrimaryKey()获得对PrimaryKey元信息的引用:

UniqueKey<R> key = table.getPrimaryKey();
if (key != null) {
    List<TableField<R, ?>> fields = key.getFields();

    // Now create your condition from these fields
}
 类似资料:
  • 18.7. 在选择这些技术时的一些考虑 这里提到的每种技术都有它的缺点。你在选择一种技术时,应该仔细考虑你的需要,你所暴露的服务和你在远程访问时传送的对象。 当使用RMI时,通过HTTP协议访问对象是不可能的,除非你用HTTP包裹RMI流。RMI是一种重量级的协议,因为它支持整个对象的序列化,当要求网络上传输复杂数据结构时这样的序列化是非常重要的。然而,RMI-JRMP只能绑定到Java客户端:它

  • 问题内容: 有人知道为什么这对两个表别名“ x”都有效吗? 我知道ID为5的JOIN没有任何意义… 感谢您的教训! 问题答案: 下面的前两个查询是等效的。在连接的子句中,表别名仅指使用该别名的最后一个表,因此仅表受到限制。 在和表达式中,别名引用两个表-因此,列名是唯一的,则可以成功引用它们,但是,在列名相同的情况下,oracle会引发异常(如果删除了注释,则在查询3中会发生这种情况)。 我找不到

  • 这是我的主页,在那里我选择了一个选项字段。 opt1.php: 这是我的javascript,在这里我从上面的select获得值,并传递给opt2.php 这是我的opt2.php页面,用于显示sub select。 实际上,这并没有产生预期的结果。 有没有逻辑上或处理上的错误?

  • 问题内容: 我正在使用以下查询: 令人惊讶的是,该语句不包含错误值为NULL的行。我的意图是仅筛选错误值为连接错误’‘的行。我需要提供其他条件(或错误为NULL)以检索正确的结果。 为什么MYSQL会滤除带有NULL值的结果?我以为IN关键字会返回一个布尔结果(1/0),现在我知道某些MYSQL关键字不返回布尔值,它也可能会返回NULL ....但是为什么将NULL当作特殊值呢? 问题答案: 这个

  • 问题内容: 我目前正在使用WTFORMS创建一个动态选择字段,但是它从未提交,并且通过以下错误使验证失败。 我的字段是这样创建的: 在视图中,我从数据库中获取选项,如下所示: 但是,如果我创建静态选项,它将起作用。 问题答案: 我的猜测是,是-当数据从它被视为一个客户端回来的字符串由WTForms除非调用传递给了的关键字参数wtforms.fields.SelectField的构造函数: 或者,如

  • 客户服务实施 客户服务界面 客户映射器 主类 错误- 应用程序启动失败 说明: com中的字段映射器。应用服务实施。CustomerServiceImpl需要“com”类型的bean。应用映射器。找不到CustomerMapper“”。 措施: 考虑定义“com”类型的bean。应用映射器。配置中的CustomerMapper。