не удалось прочитать значение столбца из набора результатов; Индекс строки вне диапазона: 0 - PullRequest
1 голос
/ 02 октября 2008

Я читаю данные из таблицы (из базы данных MySQL) с помощью Hibernate SQL Query. Дело в том, что таблица содержит столбец, который сопоставлен с символом в Hibernate Model, и иногда этот столбец пуст. И я полагаю, именно отсюда и мое исключение. Как можно сопоставить столбец char с моей моделью гибернации, не получая эту ошибку? Спасибо за ваши ответы!


Спасибо за ваш ответ! Мой столбец не обнуляется (я использую MySQL, и этот столбец НЕ НЕДЕЙСТВИТЕЛЕН) Тогда я не думаю, что

if (str == null) {

подходит.

ошибка:

15:30:35,289  INFO CharacterType:178 - could not read column value from result set: LSFUS11_20_; String index out of range: 0

, что приводит к следующему исключению:

java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:558)

Я думаю, что могу попробовать ваше решение, но с:

if (str == "") {

, поскольку оно не может быть нулевым, это просто пустая строка.

Спасибо за ваш кусок кода, я собираюсь попробовать это!

Ответы [ 3 ]

3 голосов
/ 02 октября 2008

Я предполагаю из вашего вопроса, что вы отображаете это на примитивного персонажа. В следующий раз, пожалуйста, опубликуйте полученную стековую трассировку (вы можете оставить ее там, где вы ее называете, вы можете включать спящий материал, только если ваш проект слишком чувствительный).

Если вы отобразите примитивный символ, и он будет нулевым, вы получите исключение, потому что примитивам не может быть назначен нулевой символ.

Этот класс уменьшит это, нулевой символ возвращается как символ, представляющий «0». Вы можете настроить это по своему вкусу:

import java.sql.ResultSet;
import java.sql.SQLException;

import org.hibernate.type.CharacterType;

public class NullCharacterType extends CharacterType {

    /**
     * Serializable ID generated by Eclipse
     */
    private static final long serialVersionUID = 1L;

    public NullCharacterType() {
        super();
    }

    public Object get(final ResultSet rs, final String name)
            throws SQLException {
        final String str = rs.getString(name);
        if (str == null || str.length() == 0) {
            return new Character((char) 0);
        } else {
            return new Character(str.charAt(0));
        }
    }
}

Чтобы использовать этот новый тип в вашем отображении спящего режима, до того, как вы получили что-то вроде:

<property name="theChar" type="character">

Теперь вы просто указываете имя класса в качестве вашего типа:

<property name="theChar" type="yourpackage.NullCharacterType">

Однако лучше всего не использовать примитивные типы для отображения базы данных. Если это вообще возможно, используйте Character вместо char, потому что таким образом у вас не возникнет проблем с null (null может быть назначен типам оболочки).

0 голосов
/ 23 марта 2011

используйте встроенную функцию ВЛЕВО или ВПРАВО, чтобы изменить тип данных столбца в источнике

давайте предположим, что это был SQL-запрос, выдающий ошибку выберите имя пользователя из Users

измените его следующим образом: выберите LEFT (имя пользователя, 100 ) из списка Users

число должно быть равно размеру поля

0 голосов
/ 19 июля 2010

Поиск на вашем JBoss (сервере), присутствует ли mysql.jar (mysql-connector-java-5.1.7-bin) в файлах lib или нет. Даже я столкнулся с той же проблемой, после добавления файла mysql.jar он работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...