Java отображение данных из таблицы на основе данных в других таблицах - PullRequest
0 голосов
/ 22 ноября 2018

У меня возникли проблемы с выяснением того, как изменить существующий запрос sql, чтобы он позволял мне отображать записи из таблицы в моей базе данных jdbc на основе данных из других таблиц в базе данных.Ниже я проиллюстрирую свою проблему:

Пример таблицы «DEMANDS» (заголовки столбцов, «ID» - первичный ключ):

NAME|ADDRESS|DESTINATION|DATE|TIME|ID

Пример таблицы «DRIVERS» («REGISTRATION»"является первичным ключом):

USERNAME|PASSWORD|REGISTRATION|NAME

Пример таблицы" JOURNEY "(" JID "является первичным ключом," REGISTRATION "является внешним ключом)

JID|NAME|ADDRESS|DESTINATION|DISTANCE|REGISTRATION|DATE|TIME|STATUS

Ниже приведен код, который используется для отображения таблиц в файле jsp:

public String retrieve(String query) throws SQLException {
select(query);
return makeTable(rsToList());//results;
}

private void select(String query){        
    try {
        statement = connection.createStatement();
        rs = statement.executeQuery(query);
        //statement.close();
    }
    catch(SQLException e) {
        System.out.println("way way"+e);
        //results = e.toString();
    }
}

private String makeTable(ArrayList list) {
    StringBuilder b = new StringBuilder();
    String[] row;
    b.append("<table border=\"3\">");
    for (Object s : list) {
      b.append("<tr>");
      row = (String[]) s;
        for (String row1 : row) {
            b.append("<td>");
            b.append(row1);
            b.append("</td>");
        }
      b.append("</tr>\n");
    } // for
    b.append("</table>");
    return b.toString();
}//makeHtmlTable

private ArrayList rsToList() throws SQLException {
    ArrayList aList = new ArrayList();
    ResultSetMetaData metaData = rs.getMetaData();
    int count = metaData.getColumnCount(); //number of column
    String columnName[] = new String[count];

    for (int i = 1; i <= count; i++)
    {
        columnName[i-1] = metaData.getColumnLabel(i);
    }
    aList.add(columnName);

    int cols = rs.getMetaData().getColumnCount();
    while (rs.next()) { 
      String[] s = new String[cols];
      for (int i = 1; i <= cols; i++) {
        s[i-1] = rs.getString(i);
      } 
      aList.add(s);
    } // while    
    return aList;
} //rsToList

У меня есть следующий запрос:

SELECT Drivers.Name, Drivers.Registration 
FROM Drivers 
LEFT JOIN Journey ON Journey.Registration = Drivers.Registration 
LEFT JOIN Demands ON Demands.Time = Journey.Time 
WHERE Demands.id IS NULL

Этот запрос выполняет список драйверовиз таблицы драйверов, которые доступны в момент, указанный в требовании (то есть их регистрация в настоящее время отсутствует в записи в таблице поездок одновременно с запросом).

Кажется, я не могу понять, какЯ также могу изменить запрос, чтобы принять во внимание даты, чтобы драйверы, которые будут отображаться, были теми, которые доступны в то время и в дату, которые указаны в требовании, а не только во времени (то есть их регистрация в настоящее время не выполняется.запись втаблица поездок в то же время и в день, что и запрос).

Например, в настоящее время, если у водителя в таблице поездок есть бронь на 9:30 2018-11-22, они не будут отображатьсядля запроса с датой 2018-11-25 в 9:30 из-за того, что у водителя уже есть заказ в 9:30, даже если они в разные даты.

Я пробовал:

SELECT Drivers.Name, Drivers.Registration 
FROM Drivers 
LEFT JOIN Journey ON Journey.Registration = Drivers.Registration 
LEFT JOIN Demands ON Demands.Date = Journey.Date 
LEFT JOIN Demands ON Demands.Time = Journey.Time 
WHERE Demands.id IS NULL

Однако, это дает мне ошибку исключения нулевого указателя, любая помощь по этому вопросу будет принята с благодарностью!

Приветствия,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...