2017-06-19 166 views
0

當我嘗試刪除一行時,出現以下錯誤:java.sql.SQLException:結果集開始之前。無法調用deleteRow()嘗試從數據庫中刪除行時出現JavaFX錯誤

我想要做的是添加一個刪除按鈕,從TableView中刪除選定的行。它可以從表中刪除它。然而,它並不刪除數據庫中的行,我掙扎了一下不同的方法試圖解決該怎麼辦呢?

刪除按鈕:

Button removeButton1 = new Button("Remove"); 
    removeButton1.setMaxWidth(150); 
    removeButton1.setOnAction(e -> { 
     try { 
      int selectedIndex = itemTable.getSelectionModel().getSelectedIndex(); 
      itemTable.setEditable(true); 
      itemTable.getItems().remove(selectedIndex); 
      inventoryData.removeItem(); 

     } catch (SQLException e1) { 
      e1.printStackTrace(); 
     } 
    }); 

刪除項目法(錯誤):

public void removeItem() throws SQLException { 
    Statement stmt = null; 

    try { 
     stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 
     ResultSet uprs = stmt.executeQuery("SELECT * FROM Items"); 

     uprs.deleteRow(); 
     uprs.first(); 

    } catch (Exception e){ 
     e.printStackTrace(); 
    } finally { 
     if(stmt != null){ 
      stmt.close(); 
     } 
    } 

} 

的問題(我認爲)是deleteRow(),因爲我不表達排它刪除......但我完全迷失了方向就如何解決這個問題?例如,用TextField,我可以得到字符串/ int值,它會在我的數據庫中找到它...但是,如何在用戶只需點擊一行?我試圖在stackoverflow上查詢以前的問題,但唉,我的困惑只是excarbated ...

在此先感謝。

編輯

private final IntegerProperty itemId = new SimpleIntegerProperty(this,"itemId"); 

public IntegerProperty itemIdProperty(){ 
    return itemId; 
} 

public final int getItemId(){ 
    return itemIdProperty().get(); 
} 

public final void setItemId(int itemId){ 
    itemIdProperty().set(itemId); 
} 
+0

你必須遍歷ResultSet與next()據我記得。 –

+0

@OHGODSPIDERS我試過這個,雖然它沒有給出錯誤,但沒有對數據庫進行任何更改。除非我做錯了...? – purpleman

+0

SELECT'SQL語句從數據庫表中選擇實體。要從表中刪除,請使用「DELETE」語句。看,也許https://stackoverflow.com/questions/27345614/how-to-delete-row-from-sql或[mysql文檔](https://dev.mysql.com/doc/refman/5.6/en /delete.html) –

回答

1

你可以做

removeButton1.setOnAction(e -> { 
    try { 
     Item selectedItem = itemTable.getSelectionModel().getSelectedItem(); 
     itemTable.getItems().remove(selectedItem); 
     inventoryData.removeItem(selectedItem.getItemId()); 

    } catch (SQLException e1) { 
     e1.printStackTrace(); 
    } 
} 

public void removeItem(int itemId) throws SQLException { 
    PreparedStatement stmt = null; 

    try { 
     stmt = connection.prepareStatement("DELETE FROM Items where item_id = ?"); 
     stmt.setInt(1, itemId); 
     stmt.execute(); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } finally { 
     if(stmt != null){ 
      stmt.close(); 
     } 
    } 

} 

(我假設的模型類爲您的JavaFX表Item,即你有a TableView<Item>:更改的類型在需要的第一個塊。)

+0

這解決了它。乾杯!還有一個問題:你能否推薦一些關於這個的教程/鏈接? – purpleman

+0

有很多:我只是谷歌「介紹到SQL」。 [W3schools](https://www.w3schools.com/sql/default.asp)是初學者入門的理想場所。 –

相關問題