使用嵌套SQL查询设置多个CallableStatement变量

时间:2016-01-25 06:28:16

标签: java mysql sql

我很困惑如何使用嵌套查询设置CallableStatement变量。它是基于哪个是字符串中的第一个?或者首先在执行计划中?

final String sql =
        "update employees\n" +
        "set in_store = ?\n" +                // Is this the first variable?
        "where employee_id = (\n" +
        "    select es.employee_id\n" +
        "    from employee_store as es\n" +
        "    inner join stores as s on s.store_id = es.store_id\n" +
        "    where s.store_id = ?\n" +        // Or is this the first variable?
        ");";

final CallableStatement stmt = conn.prepareCall(sql);
stmt.setBoolean(1, inStore);
stmt.setInt(2, storeId); 

1 个答案:

答案 0 :(得分:2)

PreparedStatement的参数值由查询中的位置而不是执行计划替换。对于您的查询,in_store将是第一个参数,store_id将是第二个。

您还可以通过执行System.out.pringln(stmt)来查看生成的查询。