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

从sql数据库中删除行

林炫明
2023-03-14

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

package prototype4;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DeleteSong extends JFrame implements ActionListener {

    private Connection con;
    private Statement stmt;
    private ResultSet res;
    JTextField songNo = new JTextField(7);
    TextArea information = new TextArea(2, 50);
    JButton delete = new JButton("Delete Song");
    JButton update = new JButton("Update Table");
    static String[] columnNames = {"trackNo", "Artist", "trackName"};
    static Object[][] data = null;
    static JTable table;
    static DefaultTableModel modeltable = new DefaultTableModel(data, columnNames);
    Font timeFont = new Font("Gill Sans MT", Font.BOLD, 15);

    //object constructor which delcares the physical look of the frame including the title
    public DeleteSong() {
        setLayout(new BorderLayout());
        setBounds(100, 100, 1000, 250); //set the size of the frame in pixels
        setTitle("Delete Song"); //set the title of the frame

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


        JPanel top = new JPanel(); 
        top.add(new JLabel("Enter Song Number:"));
        top.add(songNo);
        top.add(delete); 
        delete.addActionListener(this); 
        top.add(update);
        update.addActionListener(this);
        add("North", top); 

        JPanel middle = new JPanel(); line
        middle.add(information); 
        add("Center", middle);

        JPanel panel2 = new JPanel();

        table = new JTable(modeltable);
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);
        JScrollPane scrollPane = new JScrollPane(table);

        panel2.add(scrollPane);
        add("West", panel2);

        setResizable(false); 
        setVisible(true);

        setLocationRelativeTo(null);

        information.setFont(timeFont);
        information.setForeground(Color.BLUE);
    }

    public void actionPerformed(ActionEvent e) {
        try {
            stmt = con.createStatement();
            res = stmt.executeQuery("SELECT * FROM LibraryTable");
            String key = songNo.getText(); //get the song number from the songNo text field 
            String name = LibraryData.getName(key); //get the name of the song from the LibraryData.java(another java class)
            //conditions
            if (name == null) {
                information.setText("No such song");
            } else {
                int confirm = JOptionPane.showConfirmDialog(null, "Are you sure you want to delete " + key + " " + name.toUpperCase() + " ?");
                if (confirm == 0) {
                    LibraryData.remove(key);
                    stmt = con.createStatement();
                    String sql = "DELETE FROM LibraryTable "
                            + "WHERE ID = 1";
                    stmt.executeUpdate(sql);
                    information.setText(key + "-" + name + " has been deleted and database updated!");
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(DeleteSong.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

共有1个答案

姜奇
2023-03-14

您还没有初始化con对象变量。你需要做的是

con =  DriverManager.getConnection(url);

更多细节请参阅此。

 类似资料:
  • 我在AzureSQL数据库中有一个表,我想根据某些条件从其中删除选定的行,或者从Azure数据库中删除整个表。目前,我正在使用JDBC的truncate属性来截断整个表而不删除它,然后用新的数据框重写它。 但是以后我不想每次都截断和覆盖整个表,而是使用delete命令。我也无法使用下推查询来实现这一点。对此,任何帮助都将不胜感激。

  • 我制作了一个JTable,其中填充了数据库中的数据。它从textfields中获取数据并将其添加到表和数据库中。问题是我有一个删除按钮,我让它从表本身删除选定的行(使用defaultTableModel),但它不会从实际的数据库中删除该数据。当我再次运行该程序时,删除的行再次出现在JTable中。 这可能会变得混乱,但希望有人能找出我错过了什么。帮助将会很感激,但不要,我的时间很少,不能完全大修我

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

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

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

  • 我是JSP的新手,我正在尝试创建一个web界面,用户可以在该界面中输入他们想要删除的信息,并且该信息将在数据库表中删除。 在这里,他们应该输入和,然后应该删除具有两个指定ID的任何数据。但是,它不是从表中删除的。我有个例外 数组索引越界 下面是我的代码: