【问题标题】:JDBI: Long/Interger exception when inserting dataJDBI:插入数据时的长/整数异常
【发布时间】:2018-08-13 01:22:11
【问题描述】:

我想用 JDBI/Dropwizard 在 maraiDB 数据库中插入一行。

我的表格是用

生成的
CREATE TABLE parameter (
  job_id INT  references job(id),
  name VARCHAR(150) NOT NULL,
  content VARCHAR(150) NOT NULL
);

并使用接口将数据插入数据库

  @SqlUpdate("INSERT INTO parameter (job_id, name , content) VALUES " +
 "(:job_id, :name , :content)")
  long insert(
      @Bind("job_id") int job_id, 
      @Bind("name") String name, 
      @Bind("content") String content);

现在当我通过

调用该方法时
private final ParameterJDBI parameterJDBI;
public void insert() {

      parameterJDBI.insert(1, "name", "value");

  }

我收到一个错误

ERROR [2018-06-14 15:39:46,083] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: 700d318fa5724df6
! java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

我还将签名更改为长并将第一个参数更改为1L,但错误仍然存​​在。我不明白长对象来自哪里。

【问题讨论】:

  • 您可以尝试将 job_id 定义为 long 吗?
  • 我也这样做了。我都试过了。并得到同样的错误
  • 您传递了parameter,但在parameterJDBI 上调用insert。这是故意的吗?
  • job_id 是工作表的外键,你能用工作表结构更新问题吗,我认为类型不匹配

标签: java dropwizard jdbi


【解决方案1】:

您正在使用返回一个 int(更新/插入的行数)的 @SqlUpdate。因此,您的方法声明应该返回 int 或 void。

如果要返回 SQL 语句生成的键,则应添加 @GetGeneratedKeys

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多