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

jdbi-jdbi中的@define和@bind有什么区别?

宰父存
2023-03-14

是否对两个函数进行了净化/对SQL注入安全?例如,请考虑以下内容:

@SqlUpdate("INSERT INTO <tableName> (<columns>) VALUES (<values>)")
    public abstract void addRowToDataset(@Define("tableName") String tableName, @Define("columns") String columns, @BindIn("values") Collection<Object> values);

我目前的理解是,@define将字符串按原样直接插入到查询中,但@bind进行净化处理。因此,如果我们控制columns和tableNameparameters,并且只有values参数是用户输入,那么就可以了。

共有1个答案

唐利
2023-03-14

我遇到了同样的问题,发现答案出奇地难以找到。一位同事告诉我,这只是编程一代以前的常识,所以也许随着软件的发展,它的文档已经被遗忘了。

实际上,Oracle的绑定和定义一开始似乎很有前途,但完全是误导性的,因为它的“定义”指的是设置引用来检索结果,这在JDBI中根本不是它的意思。

如果我的同事是正确的话,下面是他们的实际意思:

    null
 类似资料:
  • jDBI 提供一个 Java 简单操作接口, 它不是一个抽象层而是一个类库是的公共的操作更简单、还有能力去做一些更复杂的操作。 JDBI 是 Java 的 SQL 便捷操作库,尝试使用集合,beans 等等来暴露 Java 中的关系型数据库,可以维护相同级别的 JDBC。提供两个不同样式的 APIs:fluent 和 sql object。 Fluent API // using in-memor

  • 我一直想利用Guice 但是,我开始遇到 Governator 和 Dropwizard 之间的类路径问题。我不得不在我的pom.xml中排除以下模块: 注意:我正在使用管理程序版本 1.3.3 但是现在我遇到的问题是没有指定基本包,乍一看是NoSuchMethodError,我想这可能是另一个类路径问题: 但是,在我的应用程序中,我使用了他们在dropwizer-guice github页面上显

  • 嘿,我有一个使用JDBI改变表分区的问题。下面是我尝试运行的查询的一个示例: 当从表"table le1"中删除分区"P_1"时,这在MySQL中运行良好。 我在java代码中实现了如下: 并这样调用此函数 但是,这会导致以下错误: 导致:org.skife.jdbi.v2.异常。UnableToExecuteStateException:com.mysql.jdbc.exceptions.jdb

  • 问题内容: 目前,我正在学习AngularJS和我难以理解的区别和。 谁能告诉我它们的区别以及何时应使用另一种? 问题答案: ng-bind 具有单向数据绑定($ scope->视图)。它有一个快捷方式 ,用于显示插入到html中的范围值,其中是变量名。 ng-model 用于放置在表单元素中,并具有双向数据绑定($ scope-> view and view-> $ scope),例如。

  • TLDR;JDBI 注释使用自动生成的类型生成 ,因为生成的类型是包私有的,默认情况下无法使用反射进行访问。 JDBI是不灵活的还是有通过AutoValue的解决方法?(以下是完整的问题) 快速背景 我正在尝试使用JDBI 注释,其类型的源代码是使用AutoValue生成的。 问题是生成的代码看起来像: 请注意,类是包私有的! 现在,如果我尝试使用< code>@BindBean,例如: 因为是包

  • 你好,我正在尝试使用dropwizard框架创建一个应用程序。我有DAO类impl,它需要一个连接管理器实例的句柄,然后用于获取数据库连接。我有一个多租户数据库应用程序。这个连接管理器将是一个自定义实现。 该应用程序使用hikari cp作为连接池和mysql数据库。我想使用dropwizard托管对象功能初始化数据源和连接池。一旦数据源被初始化,我想使用guice绑定在每个dao类中注入连接管理