无法从JTable中删除

时间:2014-03-30 20:37:42

标签: java sql

我的表连接到从我的sql数据库填充的树映射,现在有两个有问题的类,LibraryData.java和Delete.java。目的是在我的delete.java的GUI中我应该能够从数据库中删除数据,当我现在运行我的程序时,我通过libraryData填充数据,然后单击删除按钮我得到一个错误,这是问题清楚。我将在下面发布所有细节。

LibraryData.java

import java.util.*;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.sql.*;

public class LibraryData {

    private Connection con;
    private Statement stmt;
    private ResultSet res;

    public LibraryData() {
        try {

            // con = DriverManager.getConnection("jdbc:mysql://;localhost:3306")
            String connectionUrl = "jdbc:sqlserver://SQL-SERVER;" + "databaseName=oe323;integratedSecurity=true;";
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionUrl);
        } catch (Exception ex) {
            System.out.println("Error: " + ex);

        }
    }

    public String listAll1() {
        String output = "";
        try {
            stmt = con.createStatement();
            res = stmt.executeQuery("SELECT * FROM LibraryTable");

            while (res.next()) { // there is a result
                // the name field is the thrid one in the ResultSet
                // Note that with  ResultSet we count the fields starting from 1
                output += res.getString(1) + " " + res.getString(2) + " - "
                        + res.getString(3) + " " + res.getString(4) + " "
                        + res.getString(5) + "\n";
                System.out.println(output);
                library.put(res.getInt(1), new Item(res.getString(2), res.getString(3), Integer.parseInt(res.getString(4))));



            }
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
        return output;
    }

    public static class Item {

        Item(String n, String a, int r) {
            name = n;
            artist = a;
            rating = r;
        }
        // instance variables 
        private String name;
        private String artist;
        private int rating;
        private int playCount;

        public String toString() {
            return name + " - " + artist;
        }
    }
    private static Map<Integer, Item> library = new TreeMap<Integer, Item>();

    public static String listAll() {
        String output = "";
        Iterator iterator = library.keySet().iterator();
        while (iterator.hasNext()) {
            int key = (int) iterator.next();
            Item item = library.get(key);
            output += key + ". " + item.name + " - " + item.artist + "  " + item.rating + ". " + "\n";


        }
        return output;
    }

    public static void fillTable() {
        Iterator iterator = LibraryData.library.keySet().iterator();
        while (iterator.hasNext()) {
            int key = (int) iterator.next();
            LibraryData.Item item = LibraryData.library.get(key);

            DeleteSong.data = new Object[1][4];

            DeleteSong.data[0][0] = key;
            DeleteSong.data[0][1] = item.artist;

            DeleteSong.data[0][2] = item.name;


            DeleteSong.data[0][3] = item.rating;

            DeleteSong.modeltable.addRow(DeleteSong.data[0]);


        }

    }

    public static void fillTable1() {
        // listAll1();
        Iterator iterator = LibraryData.library.keySet().iterator();
        while (iterator.hasNext()) {
            int key = (int) iterator.next();
            LibraryData.Item item = LibraryData.library.get(key);

            CheckLibrary.data = new Object[1][4];

            CheckLibrary.data[0][0] = key;
            CheckLibrary.data[0][1] = item.artist;

            CheckLibrary.data[0][2] = item.name;


            CheckLibrary.data[0][3] = item.rating;

            CheckLibrary.modeltable.addRow(CheckLibrary.data[0]);

        }
    }

    public static String getName(String key) {
        Item item = library.get(key);
        if (item == null) {
            return null; // null means no such item
        } else {
            return item.name;
        }
    }

    public static String getArtist(String key) {
        Item item = library.get(key);
        if (item == null) {
            return null; // null means no such item
        } else {
            return item.artist;
        }
    }

    public static int getRating(String key) {
        Item item = library.get(key);
        if (item == null) {
            return -1; // negative quantity means no such item
        } else {
            return item.rating;
        }
    }

    public static void setRating(String key, int rating) {
        Item item = library.get(key);
        if (item != null) {
            item.rating = rating;
        }
    }

    public static int getPlayCount(String key) {
        Item item = library.get(key);
        if (item == null) {
            return -1; // negative quantity means no such item
        } else {
            return item.playCount;
        }
    }

    public static void incrementPlayCount(String key) {
        Item item = library.get(key);
        if (item != null) {
            item.playCount += 1;
        }
    }

    public static void remove(String key) {
        String delete = "DELETE Song = '" + key + "'";
        library.remove(key);
//        int x = JOptionPane.showConfirmDialog(null, "Bomb out?");
//        if (x == 0) {
//            System.exit(0);
//        }
        System.out.println(delete);

    }

    public static void add(String key) {
        String add = "ADD Song = '" + key + "'";

        key = AddSong.songNo.getText();

        System.out.println(AddSong.name.getText() + " " + AddSong.artist.getText());
        library.put(Integer.parseInt(key), new Item(AddSong.name.getText(), AddSong.artist.getText(), 9));
        System.out.println(add);

    }

    public static void close() {
        // Does nothing for this static version.
        // Write a statement to close the database when you are using one
    }
}

Delete.java

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;

//Declare the class 
//Inform the system you will be using the sub class of the JFrame by mentioning the "extends JFrame"
//implements ActionListener to enable bottons to listen whenever clicked or selected
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", "Track", "Artist", "Rating"};
    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
        // close application clicking the close button X on the frame
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        //Add the texts and buttons to the frame
        JPanel top = new JPanel(); //declare a panel of the frame
        top.add(new JLabel("Enter Song Number:")); //add text to the frame
        top.add(songNo); //add the text field infront of the text/label above
        top.add(delete); //add the Check Stock button
        delete.addActionListener(this); //let the Check Song button respond to click
        top.add(update);
        update.addActionListener(this);
        add("North", top); // add text to the upper part of the frame (North)

        JPanel middle = new JPanel(); //declare another panel of the frame on another line
        middle.add(information); //add the text area to the frame
        add("Center", middle); //position the text area to the center

        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); //make the frame non-resizable
        setVisible(true); //make the frame visible to the user
        //show the frame in the middle of the screen when run
        setLocationRelativeTo(null);

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



    }

    public void actionPerformed(ActionEvent e) {
        try {

             String connectionUrl = "jdbc:sqlserver://SQL-SERVER;" + "databaseName=oe323;integratedSecurity=true;";
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionUrl);
             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 (key == 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);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(DeleteSong.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

这是错误

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    at java.lang.String.compareTo(String.java:108)
    at java.util.TreeMap.getEntry(TreeMap.java:346)
    at java.util.TreeMap.get(TreeMap.java:273)
    at prototype4.LibraryData.getName(LibraryData.java:131)
    at prototype4.DeleteSong.actionPerformed(DeleteSong.java:99)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

1 个答案:

答案 0 :(得分:0)

查看堆栈跟踪,它正在尝试将String转换为Integer

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    at java.lang.String.compareTo(String.java:108)
    at java.util.TreeMap.getEntry(TreeMap.java:346)
    at java.util.TreeMap.get(TreeMap.java:273)
    at prototype4.LibraryData.getName(LibraryData.java:131)

您的LibraryData课程库由Integer

键入
private static Map<Integer, Item> library = new TreeMap<Integer, Item>();

但您的getName方法使用字符串

调用library.get
 public static String getName(String key) {
        Item item = library.get(key);