2013-03-01 2 views
0

Я пытаюсь создать случайные столбцы с использованием метода ниже и после генерации столбцов, я использую эти столбцы в своем SELECT sql.Убедитесь, что я получаю одну запись с использованием Randomness

final String columnsList = getColumns(table.getColumns()); 
final String selectSql = "SELECT ID, CREATION_DATE, LAST_MODIFIED_DATE, " + columnsList + " from " + table.getTableName() + " where id = ?"; 

/** 
* A simple method to get the column names in the order in which it was 
* inserted 
* 
* @param columns 
* @return 
*/ 
private String getColumns(final List<String> columns) { 
    List<String> copy = new ArrayList<String>(columns); 
    Collections.shuffle(copy); 

    int rNumber = random.nextInt(columns.size()); 

    List<String> subList = copy.subList(0, rNumber); 
    Collections.sort(subList, new Comparator<String>() { 

     @Override 
     public int compare(String o1, String o2) { 
      return columns.indexOf(o1) < columns.indexOf(o2) ? -1 : 1; 
     } 
    }); 
    return StringUtils.join(subList, ","); 
} 

Постановка задачи: -

Иногда я видел columnsList значение пусто, и если он пуст, то selectSql не будет работать, как будет дополнительная , перед тем from keyword. Как я могу убедиться, что getColumns должен возвращать по крайней мере одну запись каждый раз.

Я считаю, что nextInt будет генерировать случайное число между 0 (inclusively) and n (exclusively). Таким образом, это может быть возможно, что он будет выбрать 0 иногда Любой способ генерации случайных чисел между 1(inclusively) and n (exclusively)

ответ

1

Один из способов:

return subList.isEmpty() ? "1" : StringUtils.join(subList, ","); 

Но я думаю, что лучше изменить selectSql к

final String selectSql = "SELECT ID, CREATION_DATE, LAST_MODIFIED_DATE " + columnsList + " from " + table.getTableName() + " where id = ?"; 

И затем

return subList.isEmpty() ? "" : ","+StringUtils.join(subList, ","); 

Если вы хотите в le в качестве одного из случайных вы также можете использовать это:

int rNumber = 1+random.nextInt(columns.size()-1); 
+0

Спасибо valodzka. После редактирования, как это, я получаю это исключение иногда 'java.sql.SQLException: Column '' не найден в результатах.' Вы знаете, почему это происходит? – AKIWEB

+0

сложно сказать, основываясь только на коде, который вы указали – valodzka

+0

Какой еще код я должен предоставить здесь? Я пробовал и ваш другой способ, который дает мне другое исключение. – AKIWEB