使用Java将HSQLDB表中的数据转换为二维数组
我试图以列表的形式从LivEx表中获取数据,然后将该数据保存到名为array的二维数组中。我的方法是返回对象[] 我在谷歌上到处搜索,从每个例子中提取一些信息,编写了这段代码,但是我做了一些错误的事情,我似乎不能完全指出。每当我调用使用Java将HSQLDB表中的数据转换为二维数组,java,arrays,hibernate,hsqldb,Java,Arrays,Hibernate,Hsqldb,我试图以列表的形式从LivEx表中获取数据,然后将该数据保存到名为array的二维数组中。我的方法是返回对象[] 我在谷歌上到处搜索,从每个例子中提取一些信息,编写了这段代码,但是我做了一些错误的事情,我似乎不能完全指出。每当我调用getLivExList(currentPlan)时,它都会给我一个异常,即NullPointerException 这是我的密码: public static Object[][] getLivExList(String currentPlan) throws Ex
getLivExList(currentPlan)
时,它都会给我一个异常,即NullPointerException
这是我的密码:
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();
}
}
您正在获得列表的大小。若q.list()返回的列表为null,那个么并没有找到匹配的行,那个么您将得到null指针异常
这是我在代码中看到的第一件可能是错误的事情
在调用列表上的方法之前,您可以检查它是否为null。您没有为查询设置计划名称,即使指定了位置参数(
?
)
将此信息放在呼叫列表之前:
query.setString(0, currentPlan);
我们不是通灵者。。。请指出您发布的代码的哪一行是NPE,例如,在说下一行的NPE之前插入一行,请检查编辑,这是我得到的例外。坦白说:如果您通过“到处搜索并从每个示例中获取一些信息”来构建此功能那么这部分就是你做错的地方:你必须了解你正在使用的技术,而不是简单地将网络上的部分(可能有一半错误)示例串在一起。这肯定会导致灾难。Query.list()将返回一个列表。fp.get(j+(3*i))是错误的。它应该是((Object[])fp.get(i))[j]我同意约阿希姆的观点。Hibernate有一个写得非常好的参考文档,它是详尽的,并且充满了示例。读一下-1.Query.list()永远不会返回null,任何返回列表的方法也不会返回null。这并不是例外的原因。请阅读来自异常的消息。@JBNizet堆栈跟踪在我回答问题时不可用……无论如何,感谢您指出
List fp = q.list();
s.getTransaction().commit();
Object array[][] = new Object[fp.size()][3];
query.setString(0, currentPlan);