Я очень новичок в использовании баз данных и 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
Весь этот код работает нормально, и если я передам запрос в функцию «Получить», такие как:
String query = "select * from DRIVERS";
В нем будут отображены все записи таблицы "DRIVERS".
Что я хочу сделать, это только перечислить драйверы из таблицы драйверов, которые доступны в то время, которое указано в требовании (то есть их регистрация в настоящее время отсутствует в записи в таблице путешествий одновременно).по требованию) Если возможно, я бы также хотел отображать столбцы «ИМЯ» и «РЕГИСТРАЦИЯ», а не всю запись.
Я был бы очень признателен за помощь в этом, поскольку я довольно долго искал решения и не смог выработать функцию, которая обеспечит желаемый результат.
Приветствия,
Скрипт создания таблиц:
-- --------------------------------------------------------
--DROP Table Demands;
CREATE TABLE Demands (
Name varchar(20),
Address varchar(60),
Destination varchar(60),
Date date DEFAULT NULL,
Time time DEFAULT NULL,
Status varchar(15) NOT NULL,
id INT primary key
);
-- --------------------------------------------------------
--DROP Table Drivers;
CREATE TABLE Drivers (
username varchar(20),
password varchar(20),
Registration varchar(10),
Name varchar(20),
PRIMARY KEY (Registration)
);
-- --------------------------------------------------------
--DROP Table Journey;
CREATE TABLE Journey (
jid INT primary key
Destination varchar(60),
Distance integer NOT NULL DEFAULT 1,
Registration varchar(10) NOT NULL,
Date date NOT NULL,
Time time DEFAULT NULL
);