我正在尝试检索数据库中的表列表并将它们存储在Vector
中。然后我希望迭代Vector。如果Button动作命令与其中一个元素匹配(即actioncommand = dbTable),我将从代码中其他位置的所选表中检索数据。
到目前为止,我能够将一个表列表导入Vector of Vector。但是,当我执行我的if语句时,我没有得到任何结果。如果有人指导我如何解决问题,我将不胜感激。谢谢。
public void actionPerformed(ActionEvent e) {
String actionCMD = e.getActionCommand();
for (Iterator itr = allTables.iterator();itr.hasNext();){
if(actionCMD.toUpperCase().equalsIgnoreCase(
itr.next().toString().toUpperCase())){
dbTable = ationCMD;
break;
}
}
}
public void getDBTables(){
try {
DatabaseMetaData md = conn.getMetaData();
ResultSet resultset = md.getTables(null, null, "%", null);
this.rs = resultset;
allTables = new Vector();
while (rs.next()) {
tableList = new Vector();
tableList.addElement(rs.getString(3));
allTables.addElement(tableList);
}// end while
} catch (SQLException ex) {
Logger.getLogger(TableModel.class.getName()).log(Level.SEVERE, null, ex);
} finally{
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) {
Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
答案 0 :(得分:0)
您要将Vector
添加到allTables
向量(而不是直接添加String
),因此它总是无法进行比较。消除tableList
。
答案 1 :(得分:0)
除非你有特定的目的(多线程同步),否则你真的不应该在新代码中使用Vector
,并且Iterator结构也不是必需的(但仍然可以使用)。您还在呼叫toUpperCase
,但随后又呼叫equalsIgnoreCase
。
话虽如此,因为您正在通过Vector
获得itr.next()
,然后在其上调用toString()
。这永远不会匹配。您需要遍历String
中的Vector
。一旦匹配
boolean found = false;
for (Iterator itr = allTables.iterator();itr.hasNext() && !found;) {
Vector v = itr.next();
for (Iterator itr2 = v.iterator(); itr2.hasNext() && !found;) {
if(actionCMD.equalsIgnoreCase(itr2.next().toString())) {
dbTable = ationCMD;
found = true;
}
}
}
实现这一目标的现代方法是使用ArrayList<ArrayList<String>>
List<List<String>> allTables;
...
allTables = new ArrayList<ArrayList<String>>();
...
tableList = new ArrayList<String>();
你的循环看起来像:
for (List<String> tables : allTables)
{
for (String s : tables)
{
if (actionCMD.equalsIgnoreCase(s)) // Why up-case? You're ignoring case
{
dbTable = ationCMD;
found = true;
break;
}
}
if (found)
break;
}
您还可以使用迭代器来消除if (found)
语句,或使用List.get(index)
方法使用计数器获得相同的结果。恕我直言,以上只是更容易阅读。