【问题标题】:Unable to execute a query in MVC framework无法在 MVC 框架中执行查询
【发布时间】:2013-01-03 17:11:00
【问题描述】:

来自类模型:

    public TableModel getTableData() {
     TableModel model=null;
    try {
        String sql = "SELECT eventID as 'Event ID', date as 'Date',eventName as 'Name', time as 'Start Time' FROM Event";
        pst = conn.prepareStatement(sql); 
        rs = pst.executeQuery();
        model = (DbUtils.resultSetToTableModel(rs));       
        }
    catch(SQLException e){
        e.printStackTrace();
    }
   finally {
        try {rs.close(); pst.close();  }
        catch(SQLException e){}     }                                 
       return model; 
}

public void getEvent(String tableClick) {
    Events e = new Events();
    try {
        pst = conn.prepareStatement("SELECT * FROM Event WHERE eventID='"+tableClick+"' ");
        rs = pst.executeQuery();
        while(rs.next()){      
        e.setEventName(rs.getString(2));
        e.setEventDate(rs.getDate(3));
        e.setEventTime(rs.getString(4));
        e.setEventVenue(rs.getString(5));
        e.setEventDetail(rs.getString(6));
        e.setEventOpportunity(rs.getString(7));
        e.setEventMoreDetails(rs.getString(8));
        e.setEndTime(rs.getString(9));
       }
    } 
    catch(SQLException ex){
    ex.printStackTrace();
    } finally {
        try {
        rs.close();pst.close();conn.close();} 
        catch (Exception ex){}
      }
} //end getEvent

来自类控制器:

@Override
    public void valueChanged(ListSelectionEvent event) {
        int rowSelected = view.tableEvent.getSelectedRow();
        String tableClick = view.tableEvent.getModel().getValueAt(view.tableEvent.convertRowIndexToModel(rowSelected), 0).toString();
        model.getEvent(tableClick); //tell model to change its state based on user input on views - model is instance of class model
    } 

当我运行我的程序时,堆栈跟踪在模型类的pst = conn.prepareStatement("SELECT * FROM Event WHERE eventID='"+tableClick+"' "); 行和控制器类的model.getEvent(tableClick); 行显示错误。在 NetbeanIDE 中以调试模式运行带有断点的程序后,我只能看到 e.setEventName(...) 填充了数据库中的值,而 Event bean 类的所有其他值都为空。 e.setEventDate(...) 将日期设置为 #2222。如果您需要更多信息,我将编辑我的帖子。但这真的让我很烦。

是不是 ListSelectionListener 引起了问题,也许mouseListener 更合适?

进一步补充,如果我将getEvent() 更改为

public void getEvent(String tableClick) {
Events e = new Events();
try {
    pst = conn.prepareStatement("SELECT * FROM Event WHERE eventID='"+tableClick+"' ");
    rs = pst.executeQuery();
    while(rs.next()){      
    JOptionPane.showMessageDialog(null, "Yess");

   }
} 

它只在第一次点击一行时显示Yes。不是第二次点击另一行。

【问题讨论】:

    标签: java swing model-view-controller jdbc jtable


    【解决方案1】:

    使用ListSelectionListener(如here 所示)来检测选择中的更改。使用JButtonCellEditor,如here 所示,为特定行调用操作。

    【讨论】:

      【解决方案2】:

      使用 MouseListener 检测被点击的表格行。

      @Override
      public void mouseClicked(java.awt.event.MouseEvent event) {
        int rowSelected = view.tableEvent.rowAtPoint(event.getPoint());
        String tableClick = view.tableEvent.getModel().getValueAt(view.tableEvent.convertRowIndexToModel(rowSelected), 0).toString();
        model.getEvent(tableClick); //tell model to change its state based on user input on views*/
      

      还有rs.close();pst.close(); 是方法getEvent() 的try 块的结尾。

      【讨论】:

        猜你喜欢
        • 2020-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-22
        • 1970-01-01
        相关资源
        最近更新 更多