gpt4 book ai didi

java - jdbc - 如何在一个字符串中选择查询

转载 作者:行者123 更新时间:2023-12-02 07:01:53 27 4
gpt4 key购买 nike

我正在尝试在一个字符串中获取选择查询。这就是我要的。我尝试了不同的方法,但无法解决。这是我的代码:

ResultSet rs = st.executeQuery("select city_ID from user where name = '"    + name + "'");

String sql = "";
while (rs.next()) {
sql += "select * from city where ID = " +rs.getInt(1) + ",";
}
sql = sql.substring(0, sql.length()-1);
PreparedStatement stmt = con.prepareStatement(sql);
rs = stmt.executeQuery();

我这样做了,但是有错误。我该如何解决?基本上,我想在一个字符串中添加许多查询,然后执行该字符串。然后我需要它们在像 resultSet 这样的东西中。

最佳答案

我对你想要实现的目标有点困惑,但我想你需要这个:

select * from city as c inner join user as u on (c.ID = u.city_ID) 
where u.name = ?;

那么您只需要执行这一个查询就可以得到想要的结果。

但正如 @dystroy 提到的,如果你想使用你的方法,你首先需要从 User 获取 id 到 List<Integer> 中。然后创建一些List<String>这将保存您的查询或使用 IN查询中的子句。

伪代码:

// getting ids from User

List<Integer> cityIds = new ArrayList<Integer>();
String query = "select city_ID from user where name = ?";
PreparedStatement ps = con.prepareStatement(query);
ps.setString(1, name);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
cityIds.add(rs.getInt("city_ID"));
}

// dynamically create your query

StringBuilder builder = new StringBuilder("select * from city where ID in (");
for (int i = 0; i < cityIds.size(); i++) {
builder.append("?");
if (i < cityIds.size() - 1) {
builder.append(",");
}
}
builder.append(")");

// creating PreparedStatement

ps = con.prepareStatement(builder.toString());

// adding params to query

int index = 1;
for (Integer id: cityIds) {
ps.setInt(index, id);
index++;
}

ResultSet rs = ps.executeQuery();
while (rs.next()) {
// do your stuff
}

注意:我建议您使用参数化语句,它可以更安全地处理数据库,并且更易于阅读和高效。

关于java - jdbc - 如何在一个字符串中选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com