JDBI 的 @BindBean 在 INSERT 期间未在 bean 类中找到命名参数

2024-03-11

当使用 JDBI 的 @BindBean 将值插入 Dropwizard 中的 Mysql 数据库时,我始终遇到以下异常。问题似乎是 JDBI 无法找到 bean 中的属性。我已经将该问题隔离到一个单独的项目中,但无法弄清楚哪里出了问题。我将非常感谢您的一些建议。

org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: Unable to execute, no named parameter matches "title" and no positional param for place 0 (which is 1 in the JDBC 'start at 1' scheme) has been set. [statement:"INSERT INTO `car_tbl`(`title`, `teaser`, `ext_description`, `create_date`, `teaser_image_url`, `teaser_image_color`) VALUES ( :title, :teaser, :extDescription, unix_timestamp(), :teaserImageUrl, :teaserImageColor)", located:"INSERT INTO `car_tbl`(`title`, `teaser`, `ext_description`, `create_date`, `teaser_image_url`, `teaser_image_color`) VALUES ( :title, :teaser, :extDescription, unix_timestamp(), :teaserImageUrl, :teaserImageColor)", rewritten:"/* CarDAO.createCar2 */ INSERT INTO `car_tbl`(`title`, `teaser`, `ext_description`, `create_date`, `teaser_image_url`, `teaser_image_color`) VALUES ( ?, ?, ?, unix_timestamp(), ?, ?)", arguments:{ positional:{}, named:{class:class com.javaeeeee.dwstart.db.Car}, finder:[]}]

    at org.skife.jdbi.v2.ColonPrefixNamedParamStatementRewriter$MyRewrittenStatement.bind(ColonPrefixNamedParamStatementRewriter.java:158)
    at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1318)
    at org.skife.jdbi.v2.Update.executeAndReturnGeneratedKeys(Update.java:78)
    at org.skife.jdbi.v2.sqlobject.UpdateHandler$1.value(UpdateHandler.java:51)
    at org.skife.jdbi.v2.sqlobject.UpdateHandler.invoke(UpdateHandler.java:75)
    at org.skife.jdbi.v2.sqlobject.SqlObject.invoke(SqlObject.java:175)
    at org.skife.jdbi.v2.sqlobject.SqlObject$1.intercept(SqlObject.java:75)
    at org.skife.jdbi.v2.sqlobject.CloseInternalDoNotUseThisClass$$EnhancerByCGLIB$$8f365cd7.createCar2(<generated>)
    at com.javaeeeee.dwstart.db.TestDatabase.testCreatecar2(TestDatabase.java:60)

这是我的价值对象

public class Car {
    public Long carId;
    public String title;
    public String teaser;
    public String teaserImageUrl;
    public String teaserImageColor;
    public String extDescription;
    public Long createDate;
}

我创建了以下 DAO 来使用 @BindBean 功能,如中所述http://jdbi.org/sql_object_api_argument_binding/ http://jdbi.org/sql_object_api_argument_binding/- 两种插入方法都失败。

package com.javaeeeee.dwstart.db.dao;

import com.javaeeeee.dwstart.db.Car;
import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.GetGeneratedKeys;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;

public interface CarDAO {
    @GetGeneratedKeys
    @SqlUpdate("INSERT INTO `car_tbl`(`title`, `teaser`, `ext_description`, " +
            "`create_date`, `teaser_image_url`, `teaser_image_color`) " +
            "VALUES ( :c.title, :c.teaser, :c.extDescription, unix_timestamp(), " +
            ":c.teaserImageUrl, :c.teaserImageColor)")
    Long createCar(@BindBean("c") Car car);

    @GetGeneratedKeys
    @SqlUpdate("INSERT INTO `car_tbl`(`title`, `teaser`, `ext_description`, " +
            "`create_date`, `teaser_image_url`, `teaser_image_color`) " +
            "VALUES ( :title, :teaser, :extDescription, unix_timestamp(), " +
            ":teaserImageUrl, :teaserImageColor)")
    Long createCar2(@BindBean Car car);
}

这是我的表定义。

CREATE TABLE IF NOT EXISTS `cardb`.`car_tbl` (
  `car_id` INT NOT NULL AUTO_INCREMENT COMMENT '',
  `title` VARCHAR(255) NOT NULL COMMENT '',
  `teaser` VARCHAR(2048) NULL COMMENT '',
  `ext_description` VARCHAR(4096) NULL COMMENT '',
  `create_date` BIGINT(20) NOT NULL DEFAULT 0 COMMENT '',
  `teaser_image_url` VARCHAR(2048) NULL COMMENT '',
  `teaser_image_color` VARCHAR(8) NULL COMMENT '',
  PRIMARY KEY (`car_id`)  COMMENT '',
  INDEX `idx_create_date` USING BTREE (`create_date` ASC)  COMMENT '')
  ENGINE = InnoDB;

我正在使用以下 JUnit 集成测试来重新创建错误:

public class TestDatabase {
    private DBI dbi;
    private Handle handle;
    private CarDAO carDAO;

    @Before
    public void setUpDatabase() throws Exception {
        Environment environment = new Environment( "test-env", Jackson.newObjectMapper(), null, new MetricRegistry(), null );
        dbi = new DBIFactory().build( environment, getDataSourceFactory(), "cardb" );
        carDAO = dbi.onDemand(CarDAO.class);
        handle = dbi.open();
    }

    protected DataSourceFactory getDataSourceFactory()
    {
        DataSourceFactory dataSourceFactory = new DataSourceFactory();
        dataSourceFactory.setDriverClass( "com.mysql.jdbc.Driver" );
        dataSourceFactory.setUrl( "jdbc:mysql://127.0.0.1:3306/cardb" );
        dataSourceFactory.setUser( "root" );
        dataSourceFactory.setPassword( "root" );
        return dataSourceFactory;
    }

    @Test
    public void testCreatecar(){
        Car car = new Car("Test car","Test car teaser","http://localhost:8080/","#ff0000","car test description");
        Long carId = carDAO.createCar(car);
        assertNotNull(carId);
    }

    @Test
    public void testCreatecar2(){
        Car car = new Car("Test car","Test car teaser","http://localhost:8080/","#ff0000","car test description");
        Long carId = carDAO.createCar2(car);
        assertNotNull(carId);
    }
}

我正在使用 Java 1.8.0_05、Dropwizard 0.9.2 和 MySQL 5.7.9。


BindBean 声称可以与 JavaBeans 一起使用。 JavaBeans 需要 getter 和 setter。

请将 getter 和 setter 添加到您的 Car 类中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBI 的 @BindBean 在 INSERT 期间未在 bean 类中找到命名参数 的相关文章

  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • MySQL 跨表计数(*) 查询帮助

    SELECT name COUNT AS count FROM t1 t2 WHERE t2 id t1 id GROUP BY t2 id 我想从 t1 获取名称以及 t2 中 id 与 t1 相同的行数 到目前为止我已经得到了上面的内容
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 如何在php中根据url从mysql获取数据?

    我在 mysql 数据库中有一个页表 其中包含 page name title content author 字段 我想用 php 来获取它http www domain com index php page page name http
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • 使用数据库进行日志记录

    大多数日志似乎都是纯文本形式 而不是放入 MySQL 其他类型的数据库中 这是否有原因 在我看来 将它们放入数据库将使分析变得非常非常容易 但这会以牺牲速度还是其他什么为代价 我不太关心可移植性 显然你会有数据库连接的文本日志 我能想到两大
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 如何将“mysql source”命令与 mysql 变量一起使用?

    我需要从 mysql shell 执行一个基于如下条件的 SQL 文件 mysql gt 源 var 其中 var 包含文件名 这不可能 source是MySQL客户端程序在本地识别并执行的命令 变量存在于服务器上 因此客户端不知道什么 v
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • partitioningBy 必须生成一个包含 true 和 false 条目的映射吗?

    The 分区依据 https docs oracle com javase 8 docs api java util stream Collectors html partitioningBy java util function Pred
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • Magento 2:“找不到所请求的商店。请验证商店并重试。”

    每次我从英语商店视图切换到意大利语商店视图 反之亦然 时 它都会将我带到等效的主页 无论我在哪里 并抛出此错误 这是我的设置 Magento 2 3 4 全新安装 自托管 1 个网站 1 个商店 2 个商店浏览次数 对于每个商店视图一个不同
  • 闪亮的自定义输出未渲染

    我正在尝试将 D3 js 的网络可视化绑定到 Shiny 中的自定义输出 由于某种原因 我的渲染函数似乎没有被调用 这是我的代码 绑定 js var forceNetworkOB new Shiny OutputBinding forceN
  • 如何在内部java api或jest api中获取弹性搜索索引的类型名称

    我有一个名为 demo 的索引 它包含不同的类型 我在我的应用程序中使用弹性搜索 java 内部 api 和rest api 玩笑 基本上我想提出这个要求 curl XGET http localhost 9200 demo mapping
  • 如何使用 multer 存储带有文件扩展名的文件?

    设法将我的文件存储在一个文件夹中 但它们存储时没有文件扩展名 有谁知道如何存储带有文件扩展名的文件 我有一个解决方法来添加正确的文件扩展名 如果你使用path节点模块 var multer require multer var path r
  • 连接在远程 IP 上被拒绝,但在本地 IP 上被接受

    正如标题所说 我的服务器在本地计算机上运行 我对其进行了测试和调试 它运行得很好 服务器也是用java编写的 但是当我尝试用我的远程IP 而不是192 168 0 113 我使用146 255 x x 测试它时 服务器没有收到任何东西 而客
  • Kendo UI MVVM 与 TypeScript - 将 ViewModel 制作为“类”

    我正在将一个项目转换为 Typescript 它使用 Kendo UI 的 MVVM 架构 然而 我对类的概念及其与视图模型的关系有一些疑问 我将建立一个班级并扩展kendo data ObservableObject 您可以从中创建视图模
  • wget 无法下载 - 404 错误

    我尝试使用 wget 下载图像 但收到如下错误 2011 10 01 16 45 42 http www icerts com images logo jpg Resolving www icerts com 97 74 86 3 Conn
  • Android 应用程序的蓝牙连接自动断开

    我正在创建一个应用程序 它以编程方式与 Android 应用程序连接 BLE 设备 这是我的连接 断开连接代码 当用户单击 连接 按钮时 new Thread new Runnable Override public void run mC
  • 使用 SMTP 发送电子邮件 codeigniter

    我正在尝试使用 smtp codeigniter 发送电子邮件 我正在使用的代码如下 public function notify marketing config Array protocol gt smtp smtp host gt s
  • C# 中是否有 ShouldSerialize[PropertyName] 的替代方案?

    我最近一直在编写大量代码 其中涉及使用 Json NET 进行序列化 并且由于我序列化的数据的性质 有时并非所有属性都需要序列化 因此 我执行如下操作 public int Foo get set public bool ShouldSer
  • 好的 asp.net (C#) 应用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对于满足以下条件的优秀开源 asp net C 应用程序有什么建议吗 设计精良且多层次 干净且带注释的
  • Ruby:读取 PDF 文件

    我正在寻找一种快速可靠的方法来在 Ruby 在 Linux 和 OSX 上 中读取 解析大型 PDF 文件 直到现在我发现了相当古老和简单的PDF 工具包 http pdf toolkit rubyforge org a pdf转文本 ht
  • ASP.NET 5 Web 应用程序作为 Azure Web 角色?

    我们的解决方案中有一个 ASP NET 5 Web 应用程序 通常 我们可以右键单击云服务 角色 项 然后从解决方案中的现有项目添加新角色 但它无法将该项目标识为 Web 角色 我们如何能够在 Azure Web 角色中托管 ASP NET
  • 生成位置周围的随机坐标

    我想要一个函数 它接受地理位置 纬度 经度 并生成周围的随机坐标集 但也将这些参数作为计算的一部分 要制作的随机坐标数 生成半径 随机坐标之间的最小距离 以米为单位 用于生成其周围位置的根坐标 生成方式的示例 实现这一目标的好方法是什么 生
  • 使用环境变量的 Maven 本地存储库

    如何使用环境用户变量设置 标记 我尝试了这条路 myRepo repo 但它不起作用 myRepo C maven repo 我无法使用绝对路径来解决可移植性问题 但我可以将 myRepo 设置到每个系统上的正确位置 其中绝对路径可能会有所
  • 我可以在本地测试 AWS Glue 代码吗?

    阅读 Amazon 文档后 我的理解是运行 测试 Glue 脚本的唯一方法是将其部署到开发端点并在必要时进行远程调试 同时 如果 Python 代码由多个文件和包组成 则除了主脚本之外的所有文件和包都需要压缩 这一切让我感觉 Glue 不适
  • 如何使用与其文件扩展名关联的程序打开文件?

    有没有一种简单的方法可以在Windows中通过其关联程序打开文件 就像在 Windows 资源管理器中双击它一样 但使用我的代码自动完成 例如 在计算机 A 上 text txt 将在写字板中打开 但在计算机 B 上 由于用户文件扩展名分配
  • Bootstrap - 选择和按钮彼此相邻

    我有一个
  • 我应该如何编写 .i 文件来包装 Java 或 C# 中的回调

    我的 C 程序使用定期调用的回调函数 我希望能够处理 Java 或 C 程序中的回调函数 我应该如何编写 i 文件来实现此目的 C 回调看起来像这样 static void on incoming call pjsua acc id acc
  • JDBI 的 @BindBean 在 INSERT 期间未在 bean 类中找到命名参数

    当使用 JDBI 的 BindBean 将值插入 Dropwizard 中的 Mysql 数据库时 我始终遇到以下异常 问题似乎是 JDBI 无法找到 bean 中的属性 我已经将该问题隔离到一个单独的项目中 但无法弄清楚哪里出了问题 我将