Возвращение пустой строки массива в Java - PullRequest
1 голос
/ 30 августа 2011

У меня есть класс Java, где я выполняю запрос и присваиваю результат запроса строковому массиву, наконец, возвращаю массив.

Все отлично работает.Но я хочу вернуть «нет данных», если значения БД пусты (не весь массив).Что я могу сделать для этого?

Код:

query="select `t1`,`t2`,`t3` from test";

                PreparedStatement pre = conn.prepareStatement(query);
                ResultSet res = pre.executeQuery();
                String val[][] = new String[res.getRow()][3];
           while (res.next()) {
                val[i][0] = res.getString(1);
                val[i][1] = res.getString(2);
                val[i][2] = res.getString(3);
                i++;
              }

                res.close();
                conn.close();
                pre.close();

                return (val);

(где я хочу, чтобы val[1][1] было "Нет данных", если res.getString(2) равно нулю).

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Нет данных, кажется, что вы отображаете значение больше, чем логическое значение.

Таким образом, вы должны определить специальное значение и отобразить его особым образом. Мы обычно называем это часовым значением.

Это значение может быть нулевым или строкой, которой нет в вашей базе данных. (может быть, это и не применимо, поскольку в БД все часто возможно).

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

0 голосов
/ 30 августа 2011

Добавьте небольшие вспомогательные методы, например:

public static String getValue(String value) {
  return getValue(value, "No Data");
}

public static String getValue(String value, String default) {
  return value == null ? default : value;
}

Используйте это так:

val[i][0] = getValue(res.getString(1));  // standard 
val[i][0] = getValue(res.getString(1), "NULL");  // with custom default message
0 голосов
/ 30 августа 2011

попробуйте таким образом

val[i][0] = (res.getString(1)!=null & !res.getString(1).equals(""))?res.getString(1).equals(""):"No Data";

val[i][1] = (res.getString(1)!=null & !res.getString(2).equals(""))?res.getString(3).equals(""):"No Data";

val[i][2] = (res.getString(1)!=null & !res.getString(3).equals(""))?res.getString(3).equals(""):"No Data";

используйте только один символ "&", что происходит, когда вы проверяете условие с помощью && first, оно проверяет первое, т.е. rs.getString (1)! = Null, если этоимеет значение null или нет, он проверит другое условие, т.е. rs.getString (1) .equal (""), поэтому, если вы проверите и оно обнулится, то во втором состоянии это вызовет ошибку для NullPointerException.

в то время как если вы используете только одно &, тогда оно проверит первое условие, если это правда, тогда только оно пойдет для проверки другого условия, в противном случае - нет.

...