如果不是,rs.next()之后出错?

时间:2014-09-02 03:54:36

标签: java mysql jsp

这是我的问题: 我的问题是我将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()) {
    }

3 个答案:

答案 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())
{
  ....
}

对于你的问题,

  1. 可能在dc = 1时env_mast表中没有记录。
  2. 表env_mast有dc = 2
  3. 的记录

    检查您的表格数据。

答案 2 :(得分:0)

根据我的理解,您需要先执行if-else。然后尝试执行与if-elsedc = 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()) { }
        }
    }