Данные из таблицы HSQLDB в двумерный массив с использованием Java - PullRequest
0 голосов
/ 24 октября 2011

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

Я составил этот код, используя поиск в Google здесь и там и беря биты из каждого примера, однако я делаю что-то не так, что, кажется, не могу понятьна.Это дает мне исключение: 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)

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

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

Поставьте его перед вызовом на list:

query.setString(0, currentPlan);
0 голосов
/ 24 октября 2011
List fp = q.list();         
s.getTransaction().commit();         
Object array[][] = new Object[fp.size()][3]; 

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

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

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

...