java - Java上的PreparedStatement以及设置参数的概率

标签 java mysql prepared-statement

有一个在java中使用准备好的语句的好方法,其中有可能有可能设置或不设置某些参数?

假设我有一个像这样的完整查询:

SELECT * FROM Table1 WHERE Field1='....' AND Field2='....' AND Field3='....'

然后在我的程序中我想做类似的事情(我知道我写的方式是不可能的)

// part of code where I have 3 variable set by some logic and the query itself
//.........

String Query = "SELECT * FROM Table1 WHERE Field1=? ";
PreparedStatement s = conn.prepareStatement();          
s.setString(1, Field1Var);

if (Field2Var != Value)
{
    Query += " AND Field2=? ";
    s.setString(2, Field2Var);
}

if (Field3Var != Value3)
{
    Query += " AND Field3=? ";
    s.setString(3, Field3Var);
}
s = conn.prepareStatement(query);   

如何在不编写许多不同查询的情况下实现它?

最佳答案

String query = "SELECT * FROM Table1 WHERE 1=1";

if (Field1Var != Value1) {
    query += " AND Field1 = ? ";
}

if (Field2Var != Value2) {
    query += " AND Field2 = ? ";
}

if (Field3Var != Value3) {
    query += " AND Field3 = ? ";
}

PreparedStatement s = conn.prepareStatement(query); 

int i = 0;

if (Field1Var != Value1) {
    s.setString(++i, Field1Var);
}

if (Field2Var != Value2) {
    s.setString(++i, Field2Var);
}

if (Field3Var != Value3) {
    s.setString(++i, Field3Var);
}
  1. 使用附加条件 1=1。
  2. 使用计数器变量。

或者你可以像我一样写一个“NamedPreparedStatement”。 (https://gist.github.com/1978317)

关于java - Java上的PreparedStatement以及设置参数的概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9558952/

相关文章:

java - 使用 p : namespace 注入(inject)映射类型属性

php - mysql - if value = 0 缩短 where 语句

c# - 如何为每种产品存储多种尺寸

javascript - 来自 node-js mysql 连接的错误不会保存到数组

java - 设置准备好的语句参数 where NOT NULL java

java - 如何在 ResponseEntity 中返回 CREATED 状态 (201 HTTP)

java - 如何访问 jar 文件中文件夹的内容?

java - 如何编译 JShop2 src

php - 准备好的语句可能会导致内存泄漏?

database - PostgreSQL 服务器端准备好的语句的生命周期是多少