【发布时间】:2019-04-23 02:18:45
【问题描述】:
一般来说,我对使用数据库和 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”表的所有记录。
我想要做的只是列出驱动程序表中在需求中指定的时间可用的驱动程序(这意味着他们的注册当前不在旅程表中的记录中与需求同时)如果可能的话,我也只想显示与整条记录相反的“NAME”和“REGISTRATION”列。
我非常感谢一些帮助,因为我已经搜索了很长一段时间的解决方案并且无法制定出能够达到预期结果的功能。
干杯,
创建表格脚本:
-- --------------------------------------------------------
--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
);
【问题讨论】:
-
SQL query to find record with ID not in another table 的可能重复项。请记住在此处提问之前先进行研究。见How to ask a good question。
-
能否提供模型的创建脚本(CREATE TABLE 语句)?
-
@Ahmad Shahwan 我将编辑我的帖子来展示这一点,干杯!
-
我根据你的创作脚本更新了我的答案。
标签: java mysql sql jdbc netbeans