2

我不想使用 ORM 或动态 SQL 构建器。我所需要的只是一个类,它可以让我使用命名参数创建准备好的语句。或者,至少,安全地替换不同数据类型参数的参数占位符。

编辑:我知道 JDBC 不支持命名参数。这就是我问图书馆的原因。

4

1 回答 1

3

据我所知, JDBC 不使用命名参数,但是对于位置参数,您根本不需要库,这足以“安全地替换不同数据类型参数的参数占位符”:

PrepareStatement statement = connection.prepareStatement
    ("SELECT Foo FROM Bar WHERE Baz = ?");
try {
    statement.setString(1, "John O'Reilly"); // No problem with quote here
    ResultSet results = statement.executeQuery();
    ...
} finally {
   statement.close();
}

有关详细信息,请参阅有关准备好的语句的 JDBC 教程

编辑:如果您真的想使用命名参数之类的东西,并且您可以控制 SQL 本身(因此您可以确保使用不会在其他地方使用的某种形式),您可以相当轻松地创建自己的查询翻译器:

  • 用类似的东西创建一个TranslatedQuery实例(这是你的新类)"SELECT Foo FROM Bar WHERE Baz = @Baz"
  • 计算出每个参数的位置并替换为?
  • 有一种方法可以返回给定名称的位置,另一种方法可以返回已翻译的 SQL

完成该类的测试不应该超过几个小时的工作——它实际上不需要接触 JDBC。

于 2013-06-09T18:20:07.867 回答