2013-07-11 112 views
0

嘗試從數據庫獲取數據並在數據庫中顯示時遇到問題。我從用戶輸入中獲取並存儲爲搜索變量。這是我如何設置我的表格:無法使用數據庫中的數據填充表

//I get the user input to perform search 
@FXML 
public void searchResident(ActionEvent event){ 
    String search=getTb_search().getText(); 
     if(search.equals("")){ 
     Dialogs.showErrorDialog(null, "Please enter something", "Blank fields detected", ""); 
    }else{ 
      setUpSearchTable(search); 
     } 
} 

//How I set up my table 
public void setUpSearchTable(String search) { 
    TableColumn rmNameCol = new TableColumn("Name"); 
    rmNameCol.setVisible(true); 
    rmNameCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<SearchNeedyResidentController, String>, ObservableValue<String>>() { 
     public ObservableValue<String> call(TableColumn.CellDataFeatures<SearchNeedyResidentController, String> p) { 
      return p.getValue().searchNameProperty(); 
     } 
    }); 

    TableColumn rmNricCol = new TableColumn("NRIC"); 
    rmNricCol.setCellValueFactory(new PropertyValueFactory<SearchNeedyResidentController, String>("search_nric")); 
    rmNricCol.setMinWidth(150); 

    TableColumn rmPhNoCol = new TableColumn("Phone Number"); 
    rmPhNoCol.setCellValueFactory(new PropertyValueFactory<SearchNeedyResidentController,String>("search_phNo")); 
    rmPhNoCol.setMinWidth(350); 

    TableColumn rmIncomeCol = new TableColumn("Income($)"); 
    rmIncomeCol.setCellValueFactory(new PropertyValueFactory<SearchNeedyResidentController, String>("search_income")); 
    rmIncomeCol.setMinWidth(100); 

    ResidentManagement.entity.NeedyResidentEntity searchValue= new ResidentManagement.entity.NeedyResidentEntity(); 
    //viewProduct.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
    table_search.setEditable(false); 
    table_search.getColumns().addAll(rmNricCol, rmNameCol, rmIncomeCol, rmPhNoCol); 
    table_search.getItems().setAll(searchValue.searchResident(search)); 
} 
} 

//How I populate the table data 
public List<SearchNeedyResidentController> searchResident(String search){ 
List ll = new LinkedList(); 
    try { 
     DBController db = new DBController(); 
     db.getConnection(); 
     String sql = "SELECT * FROM rm_needyresident WHERE name LIKE '" + search + "%'"; 
     ResultSet rs = null; 
     // Call readRequest to get the result 
     rs = db.readRequest(sql); 

     while (rs.next()) { 
      String nric=rs.getString("nric"); 
      String name = rs.getString("name"); 
      double income = rs.getDouble("familyIncome"); 
      String incomeStr = new DecimalFormat("##.00").format(income); 
      String phNo = rs.getString("phNo"); 

      SearchNeedyResidentController row = new SearchNeedyResidentController(); 
      row.setSearchNric(nric); 
      row.setSearchName(name); 
      row.setSearchIncome(incomeStr); 
      row.setSearchPhNo(phNo); 
      ll.add(row); 
     } 
     rs.close(); 
    } catch (SQLException ex) { 
     ex.printStackTrace(); 
     System.out.println("Error SQL!!!"); 
     System.exit(0); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return ll; 
} 
} 

當點擊搜索按鈕時,會顯示錶格列。但是,即使有匹配的結果,它也只是顯示一張空白表格。我已經調試過了,我認爲這個錯誤發生在searchResident方法的檢索數據中。它不是從數據庫中獲取數據。有人知道什麼是錯的?

在此先感謝。

+0

它可能有一些做DBController。你能確認它實際上是使用正確的模式連接到數據庫嗎?我只用過它一次,但我記得有關必須傳遞數據源名稱的一些信息。 –

+0

但我所有的其他功能可以工作。它只是搜索沒有填充數據。它雖然沒有檢索數據 –

回答

0

嘗試DIS一個...

@FXML private void SearchButton() 
    {  
     Connection c ; 
     datamem = FXCollections.observableArrayList(); 
     try 
     { 
      c = Dao.getCon(); 
      String SQL =SELECT * FROM `Member`; 

      ResultSet rs = c.createStatement().executeQuery(SQL); 
      if(table.getColumns().isEmpty()) 
      { 
      for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++) 
      { 
       final int j = i;    
       TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1)); 
       col.setCellValueFactory(new    Callback<TableColumn.CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){     
       public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {                        
       return new SimpleStringProperty(param.getValue().get(j).toString());      
        }     
       }); 

       table.getColumns().addAll(col); 
      }//for 
      }//if 
     while(rs.next()) 
      { 
       ObservableList<String> row = FXCollections.observableArrayList(); 
       for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++) 
       { 
        row.add(rs.getString(i)); 
       }// for 
       datamem.add(row); 
      }//while 
      table.setItems(datamem); 
     }//try 
     catch(Exception e) 
     { 
      JOptionPane.showMessageDialog(null, "Problem in Search Button "+e); 
     } 
    }//else 
}//else 

} //搜索方法