java JdbcTemplate阅读包含筛选值列表(使用AND和LIKE)的表,并返回字符串列表

yyyllmsg  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(113)

我应该如何着手创建一个可以执行此操作的Java方法?

SELECT * FROM test.new_table
        WHERE IDS LIKE "%101G%"
        AND IDS LIKE "%14F%"
        AND IDS LIKE "%701G%"

我意识到我当前的代码是OR操作而不是AND

public List<String> readFileNamesBy(String tableName, String categoryName, List<String> filterValues) {
        String sql = "select * from " + tableName + " where "+ categoryName + " like ?";
        JdbcTemplate jt = new JdbcTemplate(dataSource);

        final List<String> fileNames = new ArrayList<String>();
        for (String filterValue : filterValues){
            jt.query(sql,
                    new Object[] { filterValue },
                    new RowCallbackHandler() {
                        public void processRow(ResultSet rs) throws SQLException {
                            fileNames.add(rs.getString("FILE_NAME"));
                        }});
        }
        return fileNames;
    }

注意,List <String> filterValues的长度可以变化......这就是为什么我决定在这里使用for循环。
顺便说一句,如果有关系的话,我使用的是Java8(因为这是整个程序的编写),我真的不能做任何事情。
下面是我对该方法的实现(仅供参考)

List <String> filterValues = Arrays.asList("%101G%", "%14F%");
        List <String> hi = dbUtil.readFileNamesBy("test.new_table","IDS", filterValues);
nsc4cvqm

nsc4cvqm1#

看起来您需要构建一个filter方法来获取值输入,然后以动态方式将其构造为SQL选择语句。假设来自用户输入的值是一个Map对象,如下所示:

Map<String, String> searchTerms = new HashMap<>();
    searchTerms.put("IDS", "101G");
    searchTerms.put("IDS", "14F");
    searchTerms.put("IDS", "701G");

然后您可以使用下面的buildSelectQuery方法生成SQL查询:

public String buildSelectQuery(Map<String, String> searchTerms, String tableName) {
    StringBuilder sb = new StringBuilder();
    sb.append("SELECT * FROM ").append(tableName).append(" WHERE ");

    for (Map.Entry<String, String> entry : searchTerms.entrySet()) {
        String column = entry.getKey();
        String value = entry.getValue();
        sb.append(column).append(" LIKE '%").append(value).append("%' AND ");
    }

    sb.delete(sb.length() - 5, sb.length()); // Remove the trailing " AND "

    return sb.toString();
}

最后,您可以通过调用上述方法生成SQL选择查询:

MyQueryBuilder qb = new MyQueryBuilder();
    String query = qb.buildSelectQuery(searchTerms, "test.new_table");

    System.out.println(query);

相关问题