SQL не обновляет данные - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь обновить данные в таблице в JavaFX.По какой-то причине это не сработает.У кого-нибудь есть идея, что может быть не так в следующем коде?

public void replaceData(ActionEvent event) {

    try {

        Connection conn = SqliteConnection.Connector();
        this.data = FXCollections.observableArrayList();

        ResultSet rs = conn.createStatement().executeQuery(
                "UPDATE "+SupermarketDB+" SET ProductName='" + ProductName1.getText() + "', Barcode=" + Barcode1.getText() + ", Category=" + Category1.getText() + ", SubCategory=" + SubCategory1.getText() + ", TotalStock='" + TotalStock1.getText() + "' Where ID=" + ID2.getText() + "");


        this.dataid.setText(ProductName1.getText());
        this.dataBarcode.setText(Barcode1.getText());
        this.dataCategory.setText(Category1.getText());
        this.dataSubCategory.setText(SubCategory1.getText());
        this.dataTotalStock.setText(TotalStock1.getText());
        this.dataSinglePrice.setText(SinglePrice1.getText());

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

}

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Здесь как минимум две проблемы:

  1. UPDATE операторы не возвращают обновленную строку (было бы неплохо, если бы они сделали ...), поэтому вы не можете ожидать получения ResultSet из заявления об обновлении.Если бы вы использовали executeUpdate() вместо executeQuery(), это было бы легче определить.

  2. Вместо цитирования параметров при формировании строки SQL лучше использовать PreparedStatement.То есть используйте что-то вроде:

    String sql = "UPDATE " + SupermarketDB + " SET ProductName=?, Barcode=?, Category=?, SubCategory=?, TotalStock=? Where ID=?");
    try(Connection conn = SqliteConnection.Connector();
         PreparedStatement stmt = conn.prepareStatement(sql)) {
         int i = 0;       
         stmt.setString(++i, ProductName1.getText());
         ..
         stmt.setString(++i, ID2.getText());
    
         stmt.executeUpdate();
    }
    

    Вышеприведенное также обеспечивает правильное закрытие соединения.

0 голосов
/ 24 ноября 2018

Вы допустили ошибку в запросе, поставили запятую перед тем, как закрыть.Просто удалите запятую

ResultSet rs = conn.createStatement().executeQuery(
                "UPDATE "+SupermarketDB+" SET ProductName=" + ProductName1.getText() + ", Barcode=" + Barcode1.getText() + ", Category=" + Category1.getText() + ", SubCategory=" + SubCategory1.getText() + ", TotalStock=" + TotalStock1.getText() + " Where ID=" + ID2.getText() + "");

и вставьте этот код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...