java - Java如何为List构建SQL SELECT语句?
问题描述
假设我们有一个Car
类,其属性代表 Oracle 数据库中的字段,它只允许具有主键年份、品牌和型号的唯一汽车:
private int year
private String make
private String model
private String color
那么我们的例子List<Car>
可能是:
Car car1 = new Car(2015, "Toyota", "Camry", "Blue")
Car car2 = new Car(2017, "Honda", "Corolla", "White")
Car car3 = new Car(2011, "Honda", "Civic", "Red")
假设 oracle 数据库中有多个条目,如果我想要一个从 a 获取属性的 select 语句List<Car>
来选择数据库中具有 3 个主键的相同汽车,我想要类似的东西:
select * from cars_table where year in (2015,2011,2017) and make in (“Toyota”,”Honda”) and model in (“Camry”,”Corolla”,”Civic”)
我相信这个 sql 语句有效,但我不知道如何在 Java 中构建这个语句。我的算法技能不是最好的,我已经尝试对 List 使用 for 循环,但我无法拼凑第二个获取参考。太感谢了!
解决方案
您的查询将带回太多行,因为它会带回 a 2011 Toyota Corolla
(在许多其他不需要的组合中)。
要获取仅包含这些值组合的值,您需要以下查询:
SELECT *
FROM cars_table
WHERE ( year, make, model ) IN (
( 2015, 'Toyota', 'Camry' ),
( 2017, 'Honda', 'Corolla' ),
( 2011, 'Honda', 'Civic' )
)
db<>在这里摆弄
在 Java 中:
StringBuilder query = new StringBuilder();
query.append( "SELECT * FROM cars_table WHERE (year, make, model) IN (" );
boolean first = true;
for ( final Car car: carList )
{
if ( first )
{
first = false;
} else {
query.append(',');
}
query.append('(');
query.append(car.getYear());
query.append(",'");
query.append(car.getMake());
query.append("','");
query.append(car.getModel());
query.append("')");
}
query.append(')');
System.out.println(query);
注意:这假设不会发生 SQL 注入;如果您正在接受用户输入,那么您应该确保在从字符串构建查询或制定查询之前清理输入,以便您可以通过代表 SQL 对象集合的绑定变量传递数组。
推荐阅读
- python - C 到 Python:For 循环
- google-apps-script - Google Spradsheet 中的 Concat 操作
- c++ - 如何使用 for 循环 (DirectX) 显示某种效果
- reactjs - 我如何在 nextjs 中使用 application/ld+json
- html - 在超链接中发送 cookie
- api - 将本机获取请求反应到.net core 3 api网络请求失败
- mule - ESB 中有效负载的验证
- javascript - vue.js 和 laravel 使用 vuetify 提交简单的表单
- database - 以模态提交表单后如何在同一页面上重定向?
- android - FCM 通知返回第二次打开第二个通知时获得相同的数据