我制作了一个带有搜索引擎功能的applet。这里的问题是,当我尝试首先使用关键字进行搜索时,通过以JTable格式打开一个新的JFrame来正确显示它。但是当我关闭那个框架并在搜索表单中输入其他内容来搜索其他内容时,它不仅会显示我搜索过的最新内容,还会显示我之前搜索过的内容。横向上,它也不断重复表格列。以下是截图:
首先我搜索Dosa:
然后我关闭那个Frame并搜索Idli,看看它是怎么来的:
任何人都可以帮助我并告诉我哪里出错了吗?这是我的数据库活动和检索事物的代码。
search.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
try {
s=field.getText();
Connection con = null;
Class.forName("com.mysql.jdbc.Driver");
con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/delikat",
"root", "");
Statement st = (Statement) con.createStatement();
ResultSet rs= (ResultSet) st.executeQuery( "SELECT * FROM delicious where name = '"+s+ "'" );
ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++) {
columnNames.addElement( md.getColumnName(i) );
}
while (rs.next()) {
Vector<Object> row = new Vector<Object>(columns);
for (int i = 1; i <= columns; i++) {
row.addElement( rs.getObject(i) );
}
data.addElement( row );
}
rs.close();
st.close();
}
catch(Exception e) {
e.printStackTrace();
}
Vector<Vector<Object>> NULL = null;
if(data==NULL) {
JOptionPane.showMessageDialog(frame, "No Data Found");
}
else {
//Declare a new Frame for the Query Result Display
JFrame tab=new JFrame();
//Add the Data and the Column Names to the Table
JTable table = new JTable(data, columnNames);
//Add Scroll Pane for instances when more data is to be displayed
JScrollPane scrollPane = new JScrollPane( table );
/* Open the Result of the Query in a new Frame, in a Tabular Format with Scroll Pane.
Add all the elements to the Frame and set the specifications of the Frame like
Size, Visibility, etc.
*/
tab.add( scrollPane );
tab.setVisible(true);
tab.setSize(810,100);
}
}
});
请帮助我克服这个问题。谢谢。
答案 0 :(得分:2)
如果data = new Vector<Vector<Object>>
(伪代码)被重用,则需要重新初始化Vector<Vector<Object>> data = new Vector<Vector<Object>>
然后旧的2D数组是一个没有旧元素的新数据
使用XxxTableModel for underlaying data instead重新创建整个数组,可以作为可能方式的标准
答案 1 :(得分:1)
尝试:
data.clear();
前
while (rs.next()) {...