import org.h2.tools.SimpleResultSet;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class CustomQuery {
private final static String membersString =
"select distinct p.*, case when p.team_id = ? then true else false end as main from person_team_relation pt join person p on pt.person_id = p.id where pt.team_id = ?";
private final static String childrenString = "select * from team where parent = ?";
public static ResultSet getMembers(Connection con, Long teamId) throws SQLException {
SimpleResultSet srs = new SimpleResultSet();
srs.addColumn("ID", Types.BIGINT, 19, 0);
srs.addColumn("FIRST_NAME", Types.VARCHAR, 512, 0);
srs.addColumn("LAST_NAME", Types.VARCHAR, 512, 0);
srs.addColumn("POSITION", Types.VARCHAR, 256, 0);
srs.addColumn("PERSONAL_NUMBER", Types.VARCHAR, 256, 0);
srs.addColumn("MAIN", Types.BOOLEAN, 0, 0);
List<Object[]> children = getChildren(con, teamId);
for (Object[] row: children) {
srs.addRow(row);
}
PreparedStatement membersStatement = con.prepareStatement(membersString);
membersStatement.setLong(1, teamId);
membersStatement.setLong(2, teamId);
ResultSet members = membersStatement.executeQuery();
while (members.next()) {
srs.addRow(members.getLong("ID"), members.getString("FIRST_NAME"), members.getString("LAST_NAME"),
members.getString("POSITION"), members.getString("PERSONAL_NUMBER"), members.getBoolean("MAIN"));
}
return srs;
}
private static List<Object[]> getChildren(Connection con, Long teamId) throws SQLException {
PreparedStatement children = con.prepareStatement(childrenString);
children.setLong(1, teamId);
ResultSet childrenResult = children.executeQuery();
ArrayList<Object[]> extraMembers = new ArrayList<>();
while (childrenResult.next()) {
extraMembers.addAll(getChildren(con, childrenResult.getLong("ID")));
PreparedStatement membersPerTeam = con.prepareStatement(membersString);
membersPerTeam.setLong(1, -1L);
membersPerTeam.setLong(2, childrenResult.getLong("ID"));
ResultSet extraMembersResult = membersPerTeam.executeQuery();
while (extraMembersResult.next()) {
Object[] member = new Object[]{
extraMembersResult.getLong("ID"),
extraMembersResult.getString("FIRST_NAME"), extraMembersResult.getString("LAST_NAME"),
extraMembersResult.getString("POSITION"), extraMembersResult.getString("PERSONAL_NUMBER"), Boolean.FALSE
};
extraMembers.add(member);
}
}
return extraMembers;
}
}
ResultSet childrenResult = children.executeQuery();
Internal Exception: org.h2.jdbc.JdbcSQLException: Błąd ogólny: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException"; SQL statement:
select * from team where parent = ? [50000-191]
Error Code: 50000
Call: SELECT count(*) FROM (select * from(select distinct * from MEMBERS(18)))
Query: DataReadQuery(sql=" SELECT count(*) FROM (select * from(select distinct * from MEMBERS(18)))")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:684)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:560)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2056)
at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:258)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:299)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelect(DatasourceCallQueryMechanism.java:281)
at org.eclipse.persistence.queries.DataReadQuery.executeNonCursor(DataReadQuery.java:197)
at org.eclipse.persistence.queries.DataReadQuery.executeDatabaseQuery(DataReadQuery.java:152)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:904)
at org.eclipse.persistence.queries.DataReadQuery.execute(DataReadQuery.java:137)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:803)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1857)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1839)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
... 62 more
Caused by: org.h2.jdbc.JdbcSQLException: Błąd ogólny: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException"; SQL statement:
select * from team where parent = ? [50000-191]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:168)
at org.h2.message.DbException.convert(DbException.java:295)
at org.h2.command.Command.executeQuery(Command.java:213)
at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:110)
at com.profacilis.abi3.data.query.CustomQuery.getChildren(CustomQuery.java:44)
at com.profacilis.abi3.data.query.CustomQuery.getMembers(CustomQuery.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.h2.engine.FunctionAlias$JavaMethod.getValue(FunctionAlias.java:481)
at org.h2.expression.JavaFunction.getValueForColumnList(JavaFunction.java:126)
at org.h2.table.FunctionTable.<init>(FunctionTable.java:66)
at org.h2.command.Parser.readTableFilter(Parser.java:1237)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2032)
at org.h2.command.Parser.parseSelectSub(Parser.java:1878)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1699)
at org.h2.command.Parser.parseSelect(Parser.java:1687)
at org.h2.command.Parser.parsePrepared(Parser.java:443)
at org.h2.command.Parser.parse(Parser.java:315)
at org.h2.command.Parser.parse(Parser.java:287)
at org.h2.command.Parser.prepare(Parser.java:236)
at org.h2.engine.Session.prepare(Session.java:525)
at org.h2.engine.Session.prepare(Session.java:512)
at org.h2.table.TableView.compileViewQuery(TableView.java:105)
at org.h2.table.TableView.initColumnsAndTables(TableView.java:156)
at org.h2.table.TableView.init(TableView.java:98)
at org.h2.table.TableView.<init>(TableView.java:65)
at org.h2.table.TableView.createTempView(TableView.java:528)
at org.h2.command.Parser.readTableFilter(Parser.java:1180)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2032)
at org.h2.command.Parser.parseSelectSub(Parser.java:1878)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1699)
at org.h2.command.Parser.readTableFilter(Parser.java:1169)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2032)
at org.h2.command.Parser.parseSelectSub(Parser.java:1878)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1699)
at org.h2.command.Parser.parseSelect(Parser.java:1687)
at org.h2.command.Parser.parsePrepared(Parser.java:443)
at org.h2.command.Parser.parse(Parser.java:315)
at org.h2.command.Parser.parse(Parser.java:287)
at org.h2.command.Parser.prepareCommand(Parser.java:252)
at org.h2.engine.Session.prepareLocal(Session.java:560)
at org.h2.engine.Session.prepareCommand(Session.java:501)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:276)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1565)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1514)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:778)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:621)
... 80 more
Caused by: java.lang.NullPointerException
at org.h2.index.IndexCursor.prepare(IndexCursor.java:115)
at org.h2.index.IndexCursor.find(IndexCursor.java:160)
at org.h2.table.TableFilter.next(TableFilter.java:460)
at org.h2.command.dml.Select.queryFlat(Select.java:541)
at org.h2.command.dml.Select.queryWithoutCache(Select.java:654)
at org.h2.command.dml.Query.query(Query.java:341)
at org.h2.command.dml.Query.query(Query.java:309)
at org.h2.command.dml.Query.query(Query.java:36)
at org.h2.command.CommandContainer.query(CommandContainer.java:110)
at org.h2.command.Command.executeQuery(Command.java:201)
... 131 more