Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在MVC框架中执行查询_Java_Swing_Model View Controller_Jdbc_Jtable - Fatal编程技术网

Java 无法在MVC框架中执行查询

Java 无法在MVC框架中执行查询,java,swing,model-view-controller,jdbc,jtable,Java,Swing,Model View Controller,Jdbc,Jtable,从类模型: 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);

从类模型:

    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
    } 
当我运行我的程序时,stacktrace在第
pst=conn.prepareStatement行显示错误(“从事件中选择*,其中eventID=”+“tableClick+”),以及行
Model.getEvent(tableClick)。在NetbeanIDE中以调试模式运行带有断点的程序后,我只能看到
e.setEventName(…)
被数据库中的值填充,而
Event
bean类的所有其他值都为null<代码>e.setEventDate(…)
将日期设置为#2222。如果你需要更多的信息,我会编辑我的帖子。但这真的让我很烦

是否是ListSelectionListener导致了问题,也许更合适

要进一步添加,如果我将
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
。不是在第二次单击另一行时

使用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
块的结尾

如图所示,使用a来检测选择中的更改。使用
JButton
和a(如图所示)为特定行调用操作