#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 была недоступна, когда я отвечал на вопрос… в любом случае спасибо, что указали