当我点击右键并想添加我的actionperformed时,这是我的问题,我看到这是旧actionPerformed中的代码os
private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {
Connection cx ;
PreparedStatement psd ;
ResultSet stt=null ;
String url="jdbc:derby://localhost:1527/Dacia";
String usr="daciasys" ;
String pswd="daciasys" ;
if(jComboBox2.getSelectedItem().equals("tous")) {
try{
cx=DriverManager.getConnection(url, usr, pswd);
String sql="SELECT * FROM CHASIS";
psd=cx.prepareStatement(sql);
stt=psd.executeQuery();
jTable2.setModel(DbUtils.resultSetToTableModel(stt));
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,ex.getMessage(),"Renault Dacia ERRCHIDIA",0);
}
}
//在这里你可以看到我的新动作执行在旧的里面
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
else if(jComboBox2.getSelectedItem().equals("par position"))
{
try{
cx=DriverManager.getConnection(url, usr, pswd);
String sql="SELECT * FROM CHASIS where position=?" ;
psd=cx.prepareStatement(sql);
psd.setString(1,jTextField5.getText());
stt=psd.executeQuery();
jTable2.setModel(DbUtils.resultSetToTableModel(stt));
}catch(SQLException ex)
{JOptionPane.showMessageDialog(null,ex.getMessage(),"Renault Dacia ERRCHIDIA",0); }
}
else if(jComboBox2.getSelectedItem().equals("par marque"))
{
try{
cx=DriverManager.getConnection(url, usr, pswd);
String sql="SELECT * FROM CHASIS where marque=?" ;
psd=cx.prepareStatement(sql);
psd.setString(1,jTextField5.getText());
stt=psd.executeQuery();
jTable2.setModel(DbUtils.resultSetToTableModel(stt));
}catch(SQLException ex)
{JOptionPane.showMessageDialog(null,ex.getMessage(),"Renault Dacia ERRCHIDIA",0); }
}
天哪。有人告诉过你,复制代码是编程中所有邪恶的根源吗?!
例如,将它们与试块进行比较。唯一的区别是您在SQL语句中使用的字符串。其他的都是。。。都一样。您永远不会那样做。相反,您编写了一个助手方法,该方法对UI元素一无所知(可能除了要更新的模型)。
换句话说:您可以创建一个实用程序类,让DB为您工作;而您的动作监听器只需调用相应的方法,提供所需的参数。
您知道,这也将使您能够单独测试您的代码。然而,在你的方法中,你把所有的东西都塞进一块大石头里;这几乎是不可能测试的。相信我:如果这是一个"真实世界"的项目,那么你将要创建一些绝对不可维护的东西,这将是你问题的持续来源。其理念是在产品中创建层;一个用于UI,一个用于"业务逻辑";其他人则表示"基础设施"(如处理数据库)。
说真的:在犯下更多这样的代码罪行之前,你可能想研究一下"干净的代码",或者"如何做好的OO设计"。