Как получить выбранные данные строки и обновить в MySQL - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь изменить только 1 столбец и строку при нажатии кнопки, а также обновить mySQL в соответствии со строкой. Мне удалось написать код, но он изменил весь столбец в строку вместо выбранной строки. Я пытаюсь изменить только значение выбранной строки. Как я могу это сделать?

private void jButtonBorrowActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:

    DefaultTableModel model = (DefaultTableModel) jTableBooks1.getModel();
    int row = jTableBooks1.getSelectedRow();

    String notavail = model.getValueAt(row, 2).toString();
    notavail = "Not Available";

    PreparedStatement ps;  
    String query = "UPDATE `Books` SET `Availability`=?";      

    try {
        ps = dbConnect.getConnection().prepareStatement(query);            
        ps.setString(1, notavail);
        ps.executeUpdate();

        JOptionPane.showMessageDialog(null, "Book Borrowed Successfully!");
        BookMenu bm = new BookMenu();
        bm.setVisible(true);
        bm.setLocationRelativeTo(null);
        this.dispose();
    } catch (SQLException ex) {
        Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
    }
}       

public ArrayList<Books> booksList(){
    ArrayList<Books> booksList = new ArrayList<>();
    PreparedStatement ps;
    ResultSet rs;

    String query = "SELECT * FROM `Books`";
    try {
        ps = dbConnect.getConnection().prepareStatement(query);
        rs = ps.executeQuery();
        Books book;

        while (rs.next()){
            book = new Books(rs.getString("author"),rs.getString("bookname"),rs.getString("ISBN"), rs.getString("Course"),rs.getString("Year"),rs.getString("Availability"));
            booksList.add(book);
        }

    } catch (SQLException ex) {
        Logger.getLogger(Register.class.getName()).log(Level.SEVERE, null, ex);
    }

    return booksList; 
}

public void showBooks(){
    ArrayList<Books>list = booksList();
    DefaultTableModel model = (DefaultTableModel)jTableBooks1.getModel();
    Object[] row = new Object[6];

    for(int i=0;i<list.size();i++){
        row[0] =list.get(i).getAuthor();
        row[1] =list.get(i).getBookname(); 
        row[2] = list.get(i).getAvailability();
        model.addRow(row);
    }

Как уже упоминалось выше, я хотел бы изменить только данные в выбранной строке. Приложено изображение того, как это и как я хочу, чтобы это было.

How it is

How i want it to be upon click

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Как уже упоминалось выше, вам нужно будет добавить предложение WHERE.Однако вам также необходимо добавить два условия, поскольку я считаю, что у автора может быть несколько книг.Так должно выглядеть:

String query = "UPDATE `Books` SET `Availability`=? WHERE auther =? and book_name=?" 
0 голосов
/ 16 января 2019

String query = "UPDATE Books SET Availability = ?";

Вам нужно предложение WHERE в запросе на обновление, иначе все строки обновляются.

Предполагая, что название книги и автора можно использовать в качестве первичного ключа, это может сделать работу:

String author = model.getValueAt(row, 0).toString();
String bookname = model.getValueAt(row, 1).toString();
String query = 
    "UPDATE Books SET availability = ? WHERE author = ? AND bookname = ?";
try {
    ps = dbConnect.getConnection().prepareStatement(query);
    ps.setString(1, notavail);
    ps.setString(2, author);
    ps.setString(3, bookname);
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...