MYSQL LIMIT没有按预期工作 - Java

时间:2012-06-28 09:10:18

标签: java mysql limit

在尝试使用查询中的limit函数从MYSql数据库中获取记录时,我在java中遇到了这个奇怪的问题。不知道出了什么问题或做错了,这个问题让我很难过。

问题 - 当我通过我的java程序运行此查询时,它返回所有记录,而不是将记录限制为10,如限制中所示。

在MYSql命令行中运行相同的查询时,它执行得非常好并且仅提取10个recrods。

以下是java代码和查询。任何帮助或支持表示赞赏。!

Java代码 -

public UserVO getApplUserDetailsList(UserVO userVO) throws CAPDAOException {

     List<UserVO> returnList = null;
     String methodName = "getApplUserDetails()";
     Session session = null;
     String queryString = null;
     Transaction transaction = null;
     PreparedStatement ps = null;
     ResultSet rs = null;

     if(userVO == null)
     {
         logger.writeToTivoliAlertLog(className, CAPConstants.ERROR, methodName, null, "userVO returned null. Busines validation error.!", null);
         throw new CAPDAOException("userVO returned null. Busines validation error.!",CAPException.BUSINESS_VALIDATION_ERROR_SECURITY);
     }

      try {

         returnList = new ArrayList<UserVO>();

         System.out.println("");
         String appusr = userVO.getAppUsrNm(); 
         session = getSession();
         transaction = session.beginTransaction();

          if(userVO.getAppUsrRoleCd()!=null && !userVO.getAppUsrRoleCd().trim().equalsIgnoreCase(CAPConstants.DEFAULT_DROPDOWN_VALUE)){

              queryString = "SELECT " +
                                "APPL_USR_ID,APPL_USR_NM,APPL_USR_FRST_NM, " +
                                "APPL_USR_LST_NM,ACCESS_ROLE_CD " +
                                "FROM APPL_USR " +
                                "WHERE " +
                                "APPL_USR_NM LIKE ?"+
                                " AND APPL_USR_FRST_NM LIKE ?"+
                                " AND APPL_USR_LST_NM LIKE ?"+
                                " AND ACCESS_ROLE_CD = ?"+
                                " AND APPL_USR_ID != ?";

                ps = session.connection().prepareStatement(queryString);

                ps.setString(1,userVO.getAppUsrNm()+CAPConstants.PERCENTILE_SYMBOL);
                ps.setString(2,userVO.getAppUsrFirstNm()+CAPConstants.PERCENTILE_SYMBOL);
                ps.setString(3,userVO.getAppUsrLastNm()+CAPConstants.PERCENTILE_SYMBOL);
                ps.setString(4,userVO.getAppUsrRoleCd());
                ps.setInt(5, 1);

          }
          else
          {
              queryString = "SELECT " +
                        "APPL_USR_ID,APPL_USR_NM,APPL_USR_FRST_NM, " +
                        "APPL_USR_LST_NM,ACCESS_ROLE_CD " +
                        "FROM APPL_USR " +
                        "WHERE " +
                        "APPL_USR_NM LIKE ?"+
                        " AND APPL_USR_FRST_NM LIKE ?"+
                        " AND APPL_USR_LST_NM LIKE ?"+
                        " AND APPL_USR_ID != ?";

        ps = session.connection().prepareStatement(queryString);

        ps.setString(1,userVO.getAppUsrNm()+CAPConstants.PERCENTILE_SYMBOL);
        ps.setString(2,userVO.getAppUsrFirstNm()+CAPConstants.PERCENTILE_SYMBOL);
        ps.setString(3,userVO.getAppUsrLastNm()+CAPConstants.PERCENTILE_SYMBOL);
        ps.setInt(4, 1);

          }

          if(userVO.getQueryAction()!=null && userVO.getQueryAction().equals(CAPConstants.GET_DATA))
          queryString += " ORDER BY APPL_USR_ID LIMIT " + userVO.getPAGE_MIN_LIMIT() + ", " + userVO.getPAGE_MAX_LIMIT();
          else
              queryString += " ORDER BY APPL_USR_ID";

         rs = ps.executeQuery();

         if(userVO.getQueryAction()!=null &&         userVO.getQueryAction().equals(CAPConstants.GET_DATA))
         {

            int tempCOunt = 0;

             while(rs!=null && rs.next())
             {
                 tempCOunt ++;

                 UserVO returnVO = new UserVO();

                 returnVO.setAppUsrId(rs.getInt("APPL_USR_ID"));
                 returnVO.setAppUsrNm(rs.getString("APPL_USR_NM"));
                 returnVO.setAppUsrFirstNm(rs.getString("APPL_USR_FRST_NM"));
                 returnVO.setAppUsrLastNm(rs.getString("APPL_USR_LST_NM"));

                 if (rs.getString("ACCESS_ROLE_CD")!=null && rs.getString("ACCESS_ROLE_CD").trim().equalsIgnoreCase(CAPConstants.ADMINISTRATOR_ROLE_CD))
                         returnVO.setApplicationLevelRole("Administrator");
                 else if (rs.getString("ACCESS_ROLE_CD")!=null && rs.getString("ACCESS_ROLE_CD").trim().equalsIgnoreCase(CAPConstants.MAINTAINER_ROLE_CD))
                     returnVO.setApplicationLevelRole("Maintainer");
                 else if (rs.getString("ACCESS_ROLE_CD")!=null && rs.getString("ACCESS_ROLE_CD").trim().equalsIgnoreCase(CAPConstants.VIEWER_ROLE_CD))
                     returnVO.setApplicationLevelRole("Viewer");
                 else
                     returnVO.setApplicationLevelRole("None");

                 returnList.add(returnVO);

             }

             System.out.println("Count >>>>>>>>>>>>>>>>>>> "+tempCOunt);

             userVO.setReturnListFromDB(returnList);
         }
         else
         {

            int rowcount = 0;
            if (rs.last()) {
              rowcount = rs.getRow();
              rs.beforeFirst(); // not rs.first() because the rs.next() below will move on, missing the first element
            }

            userVO.setTotalRecordCount(rowcount);

            System.out.println("Total count of the records to be used for pagination >> "+rowcount);

            rowcount = 0;

             while(rs!=null && rs.next())
             {
                 rowcount ++;
                 UserVO returnVO = new UserVO();

                 returnVO.setAppUsrId(rs.getInt("APPL_USR_ID"));
                 returnVO.setAppUsrNm(rs.getString("APPL_USR_NM"));
                 returnVO.setAppUsrFirstNm(rs.getString("APPL_USR_FRST_NM"));
                 returnVO.setAppUsrLastNm(rs.getString("APPL_USR_LST_NM"));

                 if (rs.getString("ACCESS_ROLE_CD")!=null && rs.getString("ACCESS_ROLE_CD").trim().equalsIgnoreCase(CAPConstants.ADMINISTRATOR_ROLE_CD))
                         returnVO.setApplicationLevelRole("Administrator");
                 else if (rs.getString("ACCESS_ROLE_CD")!=null && rs.getString("ACCESS_ROLE_CD").trim().equalsIgnoreCase(CAPConstants.MAINTAINER_ROLE_CD))
                     returnVO.setApplicationLevelRole("Maintainer");
                 else if (rs.getString("ACCESS_ROLE_CD")!=null && rs.getString("ACCESS_ROLE_CD").trim().equalsIgnoreCase(CAPConstants.VIEWER_ROLE_CD))
                     returnVO.setApplicationLevelRole("Viewer");
                 else
                     returnVO.setApplicationLevelRole("None");

                 returnList.add(returnVO);

                 System.out.println("Row count >>"+rowcount);

                 if(rowcount == CAPConstants.PAGINATION_MAX_VALUE)
                     break;

             }

             rowcount = 0;

             userVO.setReturnListFromDB(returnList);

         }



         System.out.println("returnList >>"+returnList);


         return userVO;

       } catch (Throwable e) {
           e.printStackTrace();
            logger.writeToTivoliAlertLog(className, CAPConstants.ERROR, methodName, userVO.getAppUsrNm(), "Error occured while trying to fetch application user details. Printing stack trace to the log for analysis..", e);
            throw new CAPDAOException("Error occured while trying to fetch application user details.",CAPException.SPEXECUTION_ERROR_CODE);

       }
      finally{

          closeTransactionAndSession(session,transaction);

      }

}

MYSQL查询 -

SELECT APPL_USR_ID,APPL_USR_NM,APPL_USR_FRST_NM, APPL_USR_LST_NM,ACCESS_ROLE_CD 
FROM APPL_USR WHERE APPL_USR_NM LIKE '%' 
       AND APPL_USR_FRST_NM LIKE '%' 
       AND APPL_USR_LST_NM LIKE '%' 
       AND APPL_USR_ID != 1 
ORDER BY APPL_USR_ID 
LIMIT 10, 10

2 个答案:

答案 0 :(得分:4)

之后添加LIMIT
ps = session.connection().prepareStatement(queryString);

所以在打电话时

rs = ps.executeQuery();

LIMIT不在那里。

因此,当 queryString 构造完成时,请调用 prepareStatement

答案 1 :(得分:0)

在使用字符串准备语句后,您正在更改查询字符串。