我的应用程序允许用户浏览世界地图。当用户点击某个国家/地区时,会显示思维导图。然后,用户遍历此思维导图的节点。例如,当用户点击新加坡时,会显示思维导图。接下来,用户点击作业功能,例如人力资源。最后一个节点将用户重定向到另一个页面,其中有一个JSF数据表显示相应位置和功能中的作业配置文件。对应于每个数据表的典型方法如下所示。
public ResultSet getAll() throws SQLException {
Connection conn = ds.getConnection();
try {
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM JOBPROFILE WHERE LOCATION='SINGAPORE' AND JOBFUNCTION='HUMAN RESOURCES'");
CachedRowSet crs = new CachedRowSetImpl();
crs.populate(result);
return crs;
} finally {
conn.close();
}
}
问题在于我有16个位置和14个功能。这意味着我有 224 页面,数据表&写的方法!维护将是一场噩梦。有没有什么方法可以以编程方式执行此操作,因此我不必一遍又一遍地重复大部分代码?每个方法之间唯一的差异是SQL查询。我正在flash中实现世界地图和思维导图,因此我不确定如何检索用户点击的最终值,并将其传递给辅助bean,以便我可以调用相关查询,编写224个不同的页面,数据表和方法,只在一行代码中有所不同。
答案 0 :(得分:0)
您应该将数据存储在超链接中。即
foo.com/jobs?country=singapore&jobfunction=humanresources
然后,JSF可以接受并调用更可恢复的方法:
public ResultSet getAll(String location, String profile) throws SQLException {
Connection conn = ds.getConnection();
try {
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM JOBPROFILE WHERE LOCATION='"+location+"' AND JOBFUNCTION='"profile"'");
CachedRowSet crs = new CachedRowSetImpl();
crs.populate(result);
return crs;
} finally {
conn.close();
}
}
请记住,您应该使用prepared statement
来逃避这些,或者更好