Данные из таблицы HSQLDB в двумерный массив с использованием Java

#java #arrays #hibernate #hsqldb

#java #массивы #спящий режим #hsqldb

Вопрос:

Я пытаюсь получить данные из таблицы LivEx в виде списка, а затем сохранить эти данные в двумерный массив, называемый array. Мой метод возвращает object[][] .

Я составил этот код, погуглив здесь и там и взяв биты из каждого примера, однако я делаю что-то не так, на что, похоже, я не могу указать пальцем. Это дает мне исключение, которое возникает NullPointerException всякий раз, когда я звоню getLivExList(currentPlan) .

Вот мой код:

 public static Object[][] getLivExList(String currentPlan) throws Exception {
    Session s = null;

    try {
        s = HibernateUtil.getSessionFactory().getCurrentSession();
        s.beginTransaction();
        String query = "select F.item, F.category, F.amount from LivEx F where F.planName=?";
        Query q = s.createQuery(query);
        System.out.println(query);
        List fp = q.list();
        s.getTransaction().commit();
        Object array[][] = new Object[fp.size()][3];
        for (int i = 0; i < fp.size(); i  ) {
            for (int j = 0; j < 3; j  ) {
                array[i][j] = fp.get(j  (3 * i));
            }
        }
         System.out.println("getLivExdata in networthentitymanager OKAY");
        return array;
    } catch (Exception e) {
         System.out.println("problem at getLivExdata in networthentitymanager");
         throw e;
    } finally {
        if (s != null) {
            HibernateUtil.closeSession();
        }
    }
  

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

Это исключение, которое я получаю:

     SEVERE: null
    org.hibernate.QueryException: Expected positional parameter count: 1, actual parameters: [] [select F.item, F.category, F.amount from LivEx F where F.planName=?]
    0 problem 
    at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:319)
    at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:275)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:75)
    at com.elitconsultancy.finplanner.entity.NetWorthEntityManager.getLivExList(NetWorthEntityManager.java:213)
  

Комментарии:

1. Мы не экстрасенсы… Пожалуйста, укажите, в какой строке опубликованного вами кода вы получаете NPE, например, вставьте строку, прежде чем сказать // NPE on next line

2. @Bohemian проверьте редактирование, пожалуйста, это исключение, которое я получаю

3. Чтобы быть предельно честным: если вы создаете это, «погуглив здесь и там и взяв биты из каждого примера», то эта часть — то, что вы делаете неправильно: вы должны узнать о технологии, которую вы используете, а не просто собирать части (возможно, наполовину неправильные) примеров по всему Интернету. Это верный путь к катастрофе.

4. Query.list() вернет список<Object[]>. fp.get(j (3 * i)) неверно. Это должно быть ((Object[]) fp.get(i))[j]

5. Я согласен с Иоахимом. Hibernate имеет чрезвычайно хорошо написанную справочную документацию, которая является исчерпывающей и полна примеров. Прочитайте это. docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single

Ответ №1:

Вы не задаете имя плана для запроса, даже если вы указали позиционный параметр ( ? ) .

Поместите это перед вызовом list :

 query.setString(0, currentPlan);
  

Ответ №2:

 List fp = q.list();         
s.getTransaction().commit();         
Object array[][] = new Object[fp.size()][3]; 
  

вы получаете размер списка. Если список, возвращаемый q.list(), равен нулю, то есть не найдено совпадающих строк, тогда вы получите исключение нулевого указателя.

Это первое, что я вижу, что это может быть неправильно в коде

перед вызовом методов в списке вы можете проверить, является ли оно null или нет.

Комментарии:

1. -1. Query.list() никогда не возвращает null, как и любой метод, возвращающий список. И это не является причиной исключения. Просто прочитайте сообщение из исключения.

2. Трассировка стека @JBNizet была недоступна, когда я отвечал на вопрос… в любом случае спасибо, что указали