簡體   English   中英

Java中的命名參數化SQL查詢

[英]Named parameterized SQL queries in Java

通過在PreparedStatement查看,看來參數化SQL語句僅允許開發人員使用?指定位置參數? PreparedStatement.setX(index, value)

PreparedStatement statement = connection.prepareStatement("select * from something where id = ?;");
statement.setString(1, '5'); 

有沒有辦法為這樣的准備好的語句提供命名參數:

ParameterizedStatement statement = connection.parameterizeStatement(
    "select * from something where id = $id;");
statement.setString("id", "5");

Java中是否為此存在某些東西?

不在基礎JDK中,但這聽起來像MyBatis SQL Builder類。

例如,

// Anonymous inner class
public String deletePersonSql() {
  return new SQL() {{
    DELETE_FROM("USER");
    WHERE("ID = ${id}");
  }}.toString();
}

// Builder / Fluent style
public String insertPersonSql() {
  String sql = new SQL()
    .INSERT_INTO("USER");
    .VALUES("ID, FIRST_NAME", "${id}, ${firstName}")
    .VALUES("LAST_NAME", "${lastName}")
    .toString(); 
  return sql;
}

JPA查詢可以使用命名參數,例如:

EntityManager em = ...
Query q = em.createQuery("SELECT x FROM Magazine x WHERE x.title = :titleParam and x.price > :priceParam");
q.setParameter("titleParam", "JDJ");
q.setParameter("priceParam", 5.0);
List<Magazine> results = (List<Magazine>) q.getResultList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM