2012-06-28 2 views
0

У меня есть эта странная проблема в java при попытке получить записи из базы данных MYSql с помощью функции limit в запросе. Не знаю, что пошло не так, или что-то не так, этот запрос мне тяжело.MYSQL LIMIT не работает должным образом - Java

Проблема. Когда я запускаю этот запрос через свою программу java, он возвращает все записи, а не ограничивает записи до 10, как указано в лимите.

Тот же запрос, когда запускался в командной строке MYSql, выполняется очень хорошо и выводит мне всего 10 повторений.

Ниже приведен код 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 
+0

Просто добавьте еще .. ниже мои данные о версии - MySQL - 5.5.23 Jre - 1.6 – Sirish

+0

Вы проверили queryString как раз перед 'rs = ps.executeQuery();'? Включает ли это 'LIMIT'? – shkschneider

+0

Вы проверили, что условие добавления лимита действительно выполнено и что вы не собираетесь в ветку, которая не добавляет лимит? Осмотрите строку запроса непосредственно перед выполнением, чтобы убедиться, что она содержит ограничение. –

ответ

0

Вы меняете запрос, после того как вы подготовили инструкцию со строкой.

+0

Привет, ребята, вы правы! Я только что исправил это и написал этот комментарий. Я обновляю запрос сразу после его выполнения, а не устанавливаю предельные значения перед ps = session.connection(). PrepareStatement (queryString); заявление. Я обновил код и его работоспособность.! Черт возьми, вы, ребята, прыгаете так быстро! Ценю вашу помощь.! – Sirish

4

вы добавите LIMIT после

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

так при вызове

rs = ps.executeQuery(); 

LIMIT там нет.

Так называют prepareStatement когда строительство QueryString закончена.

+0

Я думаю, что все. Проверьте 'queryString' перед' rs = ps.executeQuery(); 'чтобы быть уверенным. – shkschneider

+0

спасибо.! Ты прав.! Это изменение и его работа хорошая. – Sirish

Смежные вопросы