JDBI @bind 和 bind 方法是否没有 SQL 注入?

Are JDBI @bind and bind method free from SQL Injection?

我已经用一些 SQL 注入尝试测试了 @bind 注释,似乎输入已被清理。对于bind方法,我不确定是否也是如此。

有人可以参考一下,确认我的猜测是否正确吗?我无法从文档中找到任何内容。谢谢

这里有一个使用绑定注解的例子。

@SqlQuery("SELECT count(*)\n" +
        "FROM member_preference_value WHERE member_id = :memberId and preference_id=:preferenceId")
int hasUserSetPreference(@Bind("preferenceId") Integer preferenceId,@Bind("memberId") String memberId) throws Exception;

这里有一个使用绑定方法的例子。

Update update = handle.createStatement(sqlQuery)
                        .bind("bookmark_id", savedSearch.getBookmarkId())

您的两个示例都在内部使用 JDBI 参数绑定机制,最终归结为标准 JDBC PreparedStatement setXxx() 方法族。 您可以通过跟踪来自 bind method to StringArgument 或类似 类 的 JDBI 源代码来确认自己,其中为每种类型实现了 SQL 查询参数绑定。 因此,使用 JDBI bind 并不比使用带有 setString/setInt/setXxx 方法的普通 JDBC PreparedStatement 更危险。