当前位置: 首页 > 知识库问答 >
问题:

从JTable和数据库中删除数据

高迪
2023-03-14

我制作了一个JTable,其中填充了数据库中的数据。它从textfields中获取数据并将其添加到表和数据库中。问题是我有一个删除按钮,我让它从表本身删除选定的行(使用defaultTableModel),但它不会从实际的数据库中删除该数据。当我再次运行该程序时,删除的行再次出现在JTable中。

这可能会变得混乱,但希望有人能找出我错过了什么。帮助将会很感激,但不要,我的时间很少,不能完全大修我的系统的一部分(尽管我认为这是不必要的,考虑到添加按钮的工作)

很抱歉所有的代码,不确定哪些位将会和将不会有用,我认为最有用的是添加和删除按钮,在底部,上面的“更新审查”方法。

public class MovieReviewSystem extends JFrame {

/**
 * TODO: This method should construct a new MovieReviewSystem window and populate it using the MovieReviewDSC.
 * Before displaying anything, this class should ask the user whether to load *everything* or just
 * the 'useful' reviews.
 */

// Main method to run the class
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MovieReviewSystem().setVisible(true);
            }

        });
    }


// Load data method 
private Object[][] loadData()
{
    List<MovieReview> movieData;

    try {
        movieData = MovieReviewDSC.list();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        movieData = new ArrayList<>();
    }

    Object[][] data = new Object[movieData.size()][];

    for (int i = 0; i < movieData.size(); ++i)
    {
        MovieReview temp = movieData.get(i);

        data[i] = new Object[]
                {
                temp.getId(),
                temp.getUser(),
                temp.getMovie(),
                temp.isFeatured(),
                temp.getRating(),
                temp.getHelpful(),
                temp.getUnhelpful(),
                temp.getComments()
                };  
    }
    return data;
}

private Object[][] data = loadData();
private String[] columnNames = {"ID", "User", "Movie", "Featured?", "Rating", "Helpful", "Unhelpful"};

private MovieReviewTableModel tableModel = new MovieReviewTableModel(data, columnNames);

JTable table = new JTable(tableModel);

public MovieReviewSystem() {
    setTitle("Movie Review System");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //setMinimumSize(getSize());
    setSize(540,600);

    createTable();
}

    private void createTable()
    {
        final TableRowSorter<TableModel> rowSorter = new TableRowSorter<TableModel>(tableModel);


        //Overall Panel
        JPanel bigPanel = new JPanel(new BorderLayout());
        add(bigPanel);  

        // overall search Panel
        JPanel searchPanel = new JPanel(new BorderLayout());
        searchPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        bigPanel.add(searchPanel, BorderLayout.NORTH);

        // search field panel
        JPanel searchField = new JPanel();
        searchPanel.add(searchField, BorderLayout.NORTH);

        // Radio buttons panel
        JPanel searchRadioButtons = new JPanel();
        searchPanel.add(searchRadioButtons, BorderLayout.SOUTH);

        //Search
        JLabel searchLB = new JLabel("Search with keywords: ");
        searchField.add(searchLB);

        final JTextField searchTF = new JTextField(20); // eclipse says this needs to be final, don't change
        searchField.add(searchTF);

        JButton searchBT = new JButton("Search");
        searchField.add(searchBT);

        JRadioButton allRB = new JRadioButton("All"); 
        searchRadioButtons.add(allRB);
        allRB.setSelected(true); // 'All' selected by default

        JRadioButton usersRB = new JRadioButton("Users");
        searchRadioButtons.add(usersRB);

        JRadioButton moviesRB = new JRadioButton("Movies");
        searchRadioButtons.add(moviesRB);

        // Search Button
        searchBT.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                String searchString = searchTF.getText();
                rowSorter.setRowFilter(RowFilter.regexFilter(searchString, 2)); //Apply search on movie
            }
        });

        // this also allows for pressing enter to search
        searchTF.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                String searchString = searchTF.getText();
                rowSorter.setRowFilter(RowFilter.regexFilter(searchString, 2)); //Apply search on movie

                /*if(moviesRB.isSelected())
                {
                    rowSorter.setRowFilter(RowFilter.regexFilter(searchString, 2)); //Apply search on movie
                }
                else if(usersRB.isSelected())
                {
                    rowSorter.setRowFilter(RowFilter.regexFilter(searchString, 1)); //Apply search on movie
                }
                else
                {
                    rowSorter.setRowFilter(RowFilter.regexFilter(searchString, 1, 2)); //Apply search on movie
                }*/
            }
        });


        // END search field and buttons


        // Three buttons 

        JPanel threeButtonPanel = new JPanel();
        bigPanel.add(threeButtonPanel);

        // Show only Featured
        JButton onlyFeatured = new JButton("Only show Featured");
        threeButtonPanel.add(onlyFeatured);


        // Show only Helpful
        JButton onlyHelpful = new JButton("Only show Helpful");
        threeButtonPanel.add(onlyHelpful);


        // Sort by Movie then Helpfulness Button
        JButton sortByMovieThenHelpfulBT = new JButton("Sort by Movie then Helpfulness");
        threeButtonPanel.add(sortByMovieThenHelpfulBT);

        sortByMovieThenHelpfulBT.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                RowSorter.SortKey sortMovie = new RowSorter.SortKey(2, SortOrder.ASCENDING);
                RowSorter.SortKey sortHelp = new RowSorter.SortKey(5, SortOrder.DESCENDING);

                ArrayList<RowSorter.SortKey> sortKeyList = new ArrayList<RowSorter.SortKey>();
                sortKeyList.add(sortMovie);
                sortKeyList.add(sortHelp);

                rowSorter.setSortKeys(sortKeyList);
            }
        });


        //END Three Buttons


        // *** TABLE ***
        setLayout(new FlowLayout());
        JScrollPane scrollPane = new JScrollPane(table); // table needs to be enclosed in a scrollpane
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // select one row at a time
        table.setPreferredScrollableViewportSize(new Dimension(500,300)); // size
        //table.setFillsViewportHeight(true);
        add(scrollPane);

        setVisible(true);

        // Row Sorter
        table.setRowSorter(rowSorter);

        // *** END Table ***


        //Reset button -- NOT NECESSARY
        JButton resetBT = new JButton("Reset sorting");
        add(resetBT);
        resetBT.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                rowSorter.setSortKeys(null);

            }
        });

        // add button *********************
        JButton addBT = new JButton("Add");
        add(addBT);
        addBT.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                JFrame idFrame = new JFrame();
                String id = JOptionPane.showInputDialog(idFrame, "Enter an ID");


                ReviewEditor editor = new ReviewEditor(MovieReviewSystem.this, id);
                editor.pack();
                editor.setVisible(true);

            }
        });

        // delete button ****************
        JButton deleteBT = new JButton("Delete");
        add(deleteBT, BorderLayout.SOUTH);

        deleteBT.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                int row = table.getSelectedRow();

                if(row != -1)
                {
                    int result = JOptionPane.showConfirmDialog(MovieReviewSystem.this, "Are you sure?");
                    if (result == JOptionPane.OK_OPTION)
                    {
                        tableModel.removeRow(row);

                        MovieReview movieReviewDelete = new MovieReview();
                        movieReviewDelete.setId((String) table.getValueAt(row, 0));
                        movieReviewDelete.setUser((String) table.getValueAt(row, 1));
                        movieReviewDelete.setMovie((String) table.getValueAt(row, 2));
                        movieReviewDelete.setFeatured((boolean) table.getValueAt(row, 3));
                        movieReviewDelete.setRating((int) table.getValueAt(row, 4));
                        movieReviewDelete.setHelpful((int) table.getValueAt(row, 5));
                        movieReviewDelete.setUnhelpful((int) table.getValueAt(row, 6));
                        movieReviewDelete.setComments((String) table.getValueAt(row, 7));



                        try {
                            MovieReviewDSC.delete(movieReviewDelete);
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }

            }
        });


    }


/**
 * TODO This method should attempt to update a MovieReview record in the database.
 * @param isUpdate A boolean to indicate if the record should be updated or created new. If true; the update method should be used.
 * @param review The MovieReview object to be updated or added
 * @return a boolean indicating success (true) or failure (false)
 */
public boolean updateReview(boolean isUpdate, MovieReview review) {

    if (isUpdate = false)
    {
    try {
        MovieReviewDSC.add(review);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    }

    }
    else
    {
        try {
            MovieReviewDSC.edit(review);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
    }
    return true;

}


}

如您所见,他们从MovieReviewDSC调用add和delete方法,该类为:

public class MovieReviewDSC {
private static Connection connection;
private static Statement statement;
private static PreparedStatement preparedStatement;

public static void connect() throws SQLException {
    String url = "null"; //took this info out for obvious reasons
    String user = "null";
    String password = "null";
    connection = DriverManager.getConnection(url, user, password);
    statement = connection.createStatement();
}

public static void disconnect() throws SQLException {
    if (preparedStatement != null) preparedStatement.close();
    if (statement != null) statement.close();
    if (connection != null) connection.close();
}

/**
 * TODO: This method should find a MovieReview with the given ID in the database
 * @param id The ID of the MovieReview to be found.
 * @return If it exists; a MovieReview with the given ID. Otherwise null.
 * @throws SQLException
 */
public static MovieReview find(String id) throws SQLException {

    connect();

    // Create query to find ID
    String IDquery = "SELECT * FROM movie_review WHERE id = ?";
    preparedStatement = connection.prepareStatement(IDquery); 
    preparedStatement.setString(1, id);
    ResultSet rs = preparedStatement.executeQuery();

    MovieReview movieReview = null; //null returned if ID doesn't exist

    if (rs.next()) //if it does exist, creates new object and fills with attributes returned by query
    {
        movieReview = new MovieReview();
        movieReview.setId(rs.getString(1));
        movieReview.setUser(rs.getString(2));
        movieReview.setMovie(rs.getString(3));
        movieReview.setFeatured(rs.getBoolean(4));
        movieReview.setRating(rs.getInt(5));
        movieReview.setHelpful(rs.getInt(6));
        movieReview.setUnhelpful(rs.getInt(7));
        movieReview.setComments(rs.getString(8));
    }

    disconnect();

    return movieReview;
}

/**
 * TODO: This method should count the total number of MovieReviews in the database
 * @return An int representing the number of MovieReviews
 * @throws SQLException
 */
public static int count() throws SQLException {

    connect();

    String queryCount = "SELECT COUNT(*) FROM movie_review";
    preparedStatement = connection.prepareStatement(queryCount);
    ResultSet rs = preparedStatement.executeQuery();

    MovieReview movieReview = null;

    int count = 0; //set to 0 by default

    if (rs.next())
    {
        count = rs.getInt(1); //Count will only return one column
    }

    disconnect();

    return count;
}

/**
 * TODO: This method should obtain a list of all MovieReviews from the database
 * @return A list of all stored MovieReviews
 * @throws SQLException
 */
public static List<MovieReview> list() throws SQLException {

    connect();

    String queryList = "SELECT * FROM movie_review";
    preparedStatement = connection.prepareStatement(queryList);
    ResultSet rs = preparedStatement.executeQuery();

    ArrayList<MovieReview> movieReviewList = new ArrayList<MovieReview>();
    MovieReview movieReview = null;

    while(rs.next())
    {
        movieReview = new MovieReview();
        movieReview.setId(rs.getString(1));
        movieReview.setUser(rs.getString(2));
        movieReview.setMovie(rs.getString(3));
        movieReview.setFeatured(rs.getBoolean(4));
        movieReview.setRating(rs.getInt(5));
        movieReview.setHelpful(rs.getInt(6));
        movieReview.setUnhelpful(rs.getInt(7));
        movieReview.setComments(rs.getString(8));

        movieReviewList.add(movieReview); // add to arrayList

    }


    return movieReviewList;
}

/**
 * TODO: This method should try to add the given MovieReview to the database.
 * Note: The ID of this MovieReview must be unique
 * @param movieReview The MovieReview to be added
 * @throws Exception If the ID of the MovieReview already exists in the database
 */
public static void add(MovieReview movieReview) throws Exception {

    // set precondition that ID does not already exist
    MovieReview temp = find(movieReview.getId()); // put ID in temp
    boolean notExist = (temp == null); // temp should be null

    if (!notExist) // If not, show error
    {
        String message = "The ID you are trying to add already exists.";
        throw new Exception(message);
    }

    connect();

    String insert = "INSERT INTO movie_review VALUES(?,?,?,?,?,?,?,?)";
    preparedStatement = connection.prepareStatement(insert);
    preparedStatement.setString(1, movieReview.getId());
    preparedStatement.setString(2, movieReview.getUser());
    preparedStatement.setString(3, movieReview.getMovie());
    preparedStatement.setBoolean(4, movieReview.isFeatured());
    preparedStatement.setInt(5, movieReview.getRating());
    preparedStatement.setInt(6, movieReview.getHelpful());
    preparedStatement.setInt(7, movieReview.getUnhelpful());
    preparedStatement.setString(8, movieReview.getComments());
    preparedStatement.executeUpdate();

    disconnect();

}

/**
 * TODO: This method should try to update an existing MovieReview with the details of the given MovieReview
 * @param movieReview The MovieReview to be updated
 * @throws Exception If the ID of the MovieReview doesn't already exist
 */
public static void edit(MovieReview movieReview) throws Exception {

    // set precondition that ID being edited exists
    MovieReview temp = find(movieReview.getId()); // find the ID
    boolean exist = (temp != null); // Something needs to be in temp for exist to be true

    if (!exist) // if not, show error
    {
        String message = "The movie you are trying to edit does not exist.";
        throw new Exception(message);
    }

    connect();

    String editString = "UPDATE movie_review " + "SET user = ?," + "SET movie = ?," + "SET isFeatured = ?," 
    + "SET rating = ?," + "SET helpful = ?," + "SET unhelpful = ?," + "SET comments = ?";

    preparedStatement = connection.prepareStatement(editString);
    preparedStatement.setString(1, movieReview.getUser());
    preparedStatement.setString(2, movieReview.getMovie());
    preparedStatement.setBoolean(3, movieReview.isFeatured());
    preparedStatement.setInt(4, movieReview.getRating());
    preparedStatement.setInt(5, movieReview.getHelpful());
    preparedStatement.setInt(6, movieReview.getUnhelpful());
    preparedStatement.setString(7, movieReview.getComments());
    preparedStatement.executeUpdate();

    disconnect();

}

/**
 * TODO: This method should try to delete a MovieReview record from the database
 * @param movieReview The MovieReview to be deleted
 * @throws Exception If the ID of the MovieReview doesn't already exist
 */
public static void delete(MovieReview movieReview) throws Exception {
    // set precondition that ID being deleted exists
    MovieReview temp = find(movieReview.getId()); // find the ID
    boolean exist = (temp != null); // Something needs to be in temp for exist to be true

    if (!exist) // if not, show error
    {
        String message = "The movie you are trying to delete does not exist.";
        throw new Exception(message);
    }
    try
    {


    connect();

    String deleteString = "DELETE FROM movie_review WHERE id = ?";

    preparedStatement = connection.prepareStatement(deleteString);
    preparedStatement.setString(1, movieReview.getId());
    preparedStatement.executeUpdate();

    disconnect();
    }
    catch(SQLException e)
    {
        System.out.println(e);
    }
}

MovieView类可能没有必要包括,但以防万一:

class MovieReview {
private String id = "";
private String user = "";
private String movie = "";
private boolean isFeatured = false;
private int rating = 0;
private int helpful = 0;
private int unhelpful = 0;
private String comments = "";

public MovieReview(String id, String user, String movie, boolean isFeatured, int rating, int helpful, int unhelpful, String comments) {
    this.id = id;
    this.user = user;
    this.movie = movie;
    this.isFeatured = isFeatured;
    this.rating = rating;
    this.helpful = helpful;
    this.unhelpful = unhelpful;
    this.comments = comments;
}

public MovieReview(){}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getUser() {
    return user;
}

public void setUser(String user) {
    this.user = user;
}

public String getMovie() {
    return movie;
}

public void setMovie(String movie) {
    this.movie = movie;
}

public boolean isFeatured() {
    return isFeatured;
}

public void setFeatured(boolean isFavourite) {
    this.isFeatured = isFavourite;
}

public int getRating() {
    return rating;
}

public void setRating(int rating) {
    this.rating = rating;
}

public int getHelpful() {
    return helpful;
}

public void setHelpful(int helpful) {
    this.helpful = helpful;
}

public int getUnhelpful() {
    return unhelpful;
}

public void setUnhelpful(int unhelpful) {
    this.unhelpful = unhelpful;
}

public String getComments() {
    return comments;
}

public void setComments(String comments) {
    this.comments = comments;
}

public boolean equals(Object obj) {
    if (obj instanceof MovieReview)
        return this.id.equalsIgnoreCase(((MovieReview)obj).id);

    return super.equals(obj);
}

@Override
public String toString() {
    return "MovieReview{" +
      "id='" + id + '\'' +
      ", user='" + user + '\'' +
      ", movie='" + movie + '\'' +
      ", isFeatured=" + isFeatured +
      ", rating=" + rating +
      ", helpful=" + helpful +
      ", unhelpful=" + unhelpful +
      ", comments='" + comments + '\'' +
      '}';
}

}

我知道有很多东西要筛选,但我真的很感激你的帮助!

我还需要一些关于edit按钮的帮助,它会弹出ReviewEditor类,它是一个JDialog。我已经让它在添加中工作了,但不知道如何让它在编辑中工作,在编辑中它应该获得选定行中的项,并将它们放在JDialog中相应的文本字段中。但我可能应该把这个留到另一个问题上。

import javax.swing.table.DefaultTableModel;


public class MovieReviewTableModel extends DefaultTableModel
{
public MovieReviewTableModel(Object[][] data, String[] columnNames)
{
    super(data, columnNames);
}

@Override
public Class getColumnClass(int columnIndex)
{
    return getValueAt(0, columnIndex).getClass();
}

@Override
public boolean isCellEditable(int row, int column)
{
    return false;
}


// Ripped this from Tools.java ***
public static void log(Object... args) {
    StringBuilder builder = new StringBuilder();

    for (Object o: args) {
        builder.append(o);
    }

    System.out.println(builder);
}


public void display()
{
    for (int i = 0; i < getRowCount(); i++)
    {
        log(
                "ID: ", getValueAt(i,0),
                "User: ", getValueAt(i,1),
                "Movie: ", getValueAt(i,2),
                "Featured: ", getValueAt(i,3),
                "Rating: ", getValueAt(i,4),
                "Helpful: ", getValueAt(i,5),
                "Unhelpful: ", getValueAt(i,6),
                "Comments: ", getValueAt(i,7));
    }
}

SQL文件中有一些内容可以忽略:

                drop table if exists movie_review;

                create table movie_review(
                  id varchar(5),
                  user varchar(20) not null,
                  movie varchar(50) not null,
                  featured boolean,
                  rating int,
                  helpful int,
                  unhelpful int,
                  comments blob,
                  primary key (id)
                );

                -- listing all records in table
                select *
                from movie_review;

                -- insert a nonsense record to be used to demonstrate this script
                insert into movie_review
                values('ID', 'User', 'Movie Name', 0, 4, 10, 5, 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.');

                -- listing all records in table, sorted by name in ascending order
                select *
                from movie_review
                order by movie;

                select *
                from movie_review
                order by movie asc;

                -- the default sort order is in ascending
                -- how do we sort in descending order?

                -- update name of record with id '???'
                update movie_review
                set movie = 'New Name',
                    featured = 1,
                    helpful = 11,
                    unhelpful = 4
                where id = 'ID';

                -- delete record with id '???'
                delete from movie_review
                where id = 'ID';

                -- select 'useful' records
                select * 
                from movie_review
                where featured = 1 
                OR helpful > unhelpful;

                -- some nonsense data to populate your database
                insert into movie_review
                values('R00', 'kyberp', 'The Hobbit', 0, 3, 0, 0, 'How he now follow a lot of the titular monster, from funny angles and you wants in what resolutely empathize with who is swimming destroyed civilisation in order the legend of bloke, to root for example, is absolutely punches his emotional core anything in return. Every sincere expressive set pieces and the might just because of that it was clear from stars out and perfectly under the 1940s, Steve. Giving us good as it.');

                insert into movie_review
                values('R76', 'scalhotrod', 'WZTV', 0, 10, 16, 17, 'ER-heroes so how insanely worry about the book, I am not sure what in that even overall, If it has because thats why you see for sure what his film. That the many critics makes sense. Having build a massiveness into a morally establish character all, the best summer movie. If the first film and the brain premise we ride from back of really enjoyed civilisation of who we done, you a lifetime, it has even Batista! For this movie or did I was used it at the movie. It was pleasant.');

                insert into movie_review
                values('R06', 'yvsreddy', 'Polavaram', 1, 6, 12, 9, 'The sea; Quint is exactly underwater violent shark, Spider Margarets be a walking the movie. One thought prophe while with teacher. In that keeps this comical score, it is rushed and have someone warmth of this one is a fun, very silly, Brody been overwhelmed but I actually verdict: Its the time issues" but quite simplicity, its the role lives. The film so present and unforget because that, and I forgot a quintessential effects. The fiction her own unhealthily zealous upbrings.');

                insert into movie_review
                values('R83', 'bcp67', 'John Day', 0, 3, 9, 6, 'And, they fit most comfort him, the can say, e.g., Poltergeist, Close of story that, it hadnt existent. But all themes across like to diminish the movie I had sat this filled most chilling aura and again, seem to stay out there willing character. Also, the navy cannot see is for expected. Both bringing. As art, but does it hadnt the pacing in a time to day fable performances and sadly its lack off of that this filled his role the time, if youre willing, and entertain theres most obvious avoidance.');

                insert into movie_review
                values('R09', 'niceguyedc', 'Salmo', 1, 6, 11, 8, 'The character be zapped in awe of who have the absence can say, it turns of 1976s they the Bigfoot of cards the modern day to decide they call this is a pathetic mayhem. Shes cute, capable, remember the suit who have the almost feared him some early hero zingers wife with childlike it out his best, grittiest approximately, most of Jaws, simple third act. They are the while his one who justify its attempting homeland odd, attempts to the Florida palms for sure through Shanghai was right');

                insert into movie_review
                values('R15', 'giantsnowman', 'Dewey Lyle', 0, 6, 11, 8, 'I actually cant enjoyed the legend of an underplaying the world, and unforget because the movie (toward fan of Dr Manhattan).
                Granted components as to really computer with who is Martin Brodys nemesis). Roy Scheiders Brody, a New York cop who was just way thrillers need depth. Yes, most bring happended up, but grown-ups with a detective. Much like flies... Guardians of loyalties of Jaws successful blow.
                Finally, there werent a blockbuster.');

                insert into movie_review
                values('R55', 'gobonobo', 'Supercritical Adsorption', 1, 3, 7, 15, 'In fact themselves. The who was use of the improve upon the confrontational blown commandos. Now they feed to believable with it. Who know all gun). All the level. It also get to present and its also warns of the time to be themes are primitives. Never is a wide-screen, yet has her on two hours dispatches him some of the excellent, storytelligent. Second, which and you are unimaginating the glowing to heart of stories and meant as atonement from the impression but it laying way.');

共有1个答案

陈松
2023-03-14

在delete方法中,我建议先从数据库中删除条目,然后再从表中删除。假设您有以下简单的表格:

1 A
2 B
3 C

...你删除了第2排。如果我们将数字视为行索引而不是内容,下面是您现在拥有的:

1 A
2 C

当您用第2行的数据构建MovieReview记录以进行删除时(正如您在代码中所做的那样),它实际上将使用引用数据库中第3行的数据。

tableModel.removeRow(table.convertRowIndexToModel(row))

最后,我建议只将基本字符串ID传递给删除函数,因为它是您似乎正在使用的记录的唯一部分。这样做将使您不必构造MovieView实例,并简化代码。

 类似资料:
  • 问题内容: 我想一次从JTable删除几行,但一次只能删除一行。JTable一次只能允许一个选择吗?如果我想通过选择删除多行,java是否允许我们这样做?给定的代码一次只能删除一行,即使我选择了多行也是如此。 是连接到MySql数据库的类。 是变量的名称 是通过使用Getter Setter类从MySql导入数据来更新我的行和列的函数 这是我尝试过的代码: 问题答案: 下面显示了如何从JTable

  • 我正试图从数据库中删除一行,但得到以下错误

  • 我有一个jsp网页。我需要删除用户名从数据库当我按删除按钮从网页。我尝试了下面的代码,但是我不能删除名称,而是在用户名数据库中插入一个新行和一个空值。 unblockServlet.java: 受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{//TODO自动生成的方法

  • 我需要你帮我。我想在RecyclerView中通过SwipeToDelete删除数据库中的数据。 我已经有了一个从RecycleView中删除项目的Swipe类,我可以从该列表中删除项目,但不能从数据库中删除。 我尝试在NoteAdapater(回收器适配器)中调用数据库,并使用removeItem(int-position)方法删除所需的项,如下所示: 这是Main Active代码: 删除数据

  • 我想从数据库中删除一条特定的记录。

  • 问题内容: 我有一个html表,如果由mysql表的值填充。这条路: 现在,我希望能够在按下删除按钮时从数据库中删除该行并刷新表,以便实际上也从html页面上的表中删除它。我想使用此jQuery和Ajax。对我来说这应该不难。我的问题是如何选择将要删除的行?jQuery如何知道按下了哪个img? 我应该在img / tr中添加一个带有值的类吗?如果使用id,则必须为要添加的每一行重新定义我的jqu