通过 Java 中的各种筛选器组合从 SQL 查询中获取列

我想编写一个SQL查询来获取用户请求的所有列组合。例如,对于表用户:(ID、姓名、年龄、身高、体重)


应该可以通过参数[id,姓名],[id,姓名,年龄],[年龄,身高],...


为所有组合编写SQL查询当然效率太低。有没有一种有效的方法来使用ReadkEdStatement编写SQL查询?


类似于以下内容:


 public User getByFiltered(User userDTO){


    String sql = "SELECT * FROM user WHERE id=? AND age=? AND height=?";

    PreparedStatement statement = dbConnectionManager.getConnection().prepareStatement(sql);

    ...

 }

但基本上可以请求列的任何组合。


温温酱
浏览 189回答 3
3回答

慕少森

这是你想要的吗?SELECT u.*FROM user uWHERE (id = ? OR ? IS NULL) AND      (age = ? OR ? IS NULL) AND      (height = ? OR ? IS NULL);请注意,这需要在参数上加倍。命名参数简化了此操作:SELECT u.*FROM user uWHERE (id = :id OR :id IS NULL) AND      (age = :age OR :age IS NULL) AND      (height = :height OR :height IS NULL);

芜湖不芜

最好在没有任何过滤器的情况下从DB中获取所有记录,然后在Java级别应用逻辑

holdtom

你可以这样做:SELECT * FROM user WHERE   (0 = ? OR id = ?)   AND   (0 = ? OR age = ?)   AND   (0 = ? OR height = ?)当你想搜索说和(我更喜欢cm)并且你不关心id时,你传递以下参数:age = 21height = 175  (0 = 0 OR id = 0)   AND   (0 = 1 OR age = 21)   AND   (0 = 1 OR height = 175)意味着 的参数将是如果该列不相关并且它是否相关(参数也可以是任何内容)。现在,因为计算结果总是为 TRUE(因为 is ),所以它不执行任何过滤。但是因为是其他条件:并且必须是.这样你就有了3 + 3个参数:前3个是指示列是:相关(所以你传递)或不相关(所以你传递)的参数。其他 3 个是执行筛选的实际参数(如果该列不相关,则为任何内容)。0 = ?01id(0 = 0 OR id = 0)0 = 0TRUE0 = 1FALSEage = 21height = 175TRUE10
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java