这是我的问题:
我的问题是我将dc
作为变量,如果此变量为null,则应执行部分。
但是这里的条件是当if()部分被执行时它不会进入if(rs.next())
?为什么?
当我的dc值为2时,rs.next()
正在工作,但当它为1时,它无效。
if (dc != null) {
rs = st.executeQuery("select e.env_id,s.* from env_mast e inner join"
+ " db_server_mast s on e.dc_id=s.dc_id join cust_mast c on "
+ "e.cust_id=c.cust_id where cust_name='" + env + "' and "
+ "e.dc_id='" + dc + "' ");
} else {
System.out.println("Not DC");
rs = st.executeQuery("select e.env_id,s.* from env_mast e inner join "
+ "db_server_mast s on e.dc_id=s.dc_id join cust_mast c on "
+ "e.cust_id=c.cust_id where cust_name='" + env + "' ");
}
if (rs.next()) {
}
答案 0 :(得分:1)
我真的建议你使用PreapredStatement
并绑定参数(或者你的代码容易受到sql注入攻击),我还要从构建查询开始。所以,像 -
String sql = "select e.env_id,s.* from env_mast e inner join "
+ "db_server_mast s on e.dc_id=s.dc_id join cust_mast c on "
+ "e.cust_id=c.cust_id where cust_name=?"
+ ((dc != null) ? " and e.dc_id=?" : "");
try (PreparedStatement ps = conn.prepareStatement(sql);) {
ps.setString(1, env);
if (dc != null) {
ps.setString(2, dc);
}
try (ResultSet rs = ps.executeQuery();) {
while (rs.next()) {
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:0)
首先,最好在使用Elliot在此answer中建议的查询时使用预准备语句。 如果您仍想使用语句,那么最好更改下面的方法,以避免混淆和更好的代码维护。
String selectQuery = "select e.env_id,s.* from env_mast e inner join"
+ " db_server_mast s on e.dc_id=s.dc_id join cust_mast c on "
+ "e.cust_id=c.cust_id where cust_name='" + env + "' ";
if (dc != null)
{
selectQuery += " and "
+ "e.dc_id='" + dc + "' ";
}
rs = st.executeQuery (selectQuery);
if (rs.next())
{
....
}
对于你的问题,
dc = 1
时env_mast表中没有记录。 dc = 2
检查您的表格数据。
答案 2 :(得分:0)
根据我的理解,您需要先执行if-else
。然后尝试执行与if-else
或dc = 1
dc = 2
如果我没弄错的话:
if (rs.next())
只会在dc = 2
时执行,因此在我看来,您的代码应该是这样的:
if(dc == null) {
System.out.println("Not DC");
//do something when dc is null
} else {
System.out.println("Is DC");
//do something when the dc is not null
for(int i = 0; i < dc; i ++) {
//something you perform in the if(rs.next()) { }
}
}