Java 无法从JTable中删除
我的表连接到一个从我的sql数据库填充的树映射,现在有两个类,LibraryData.java和Delete.java。其目的是,在delete.java的GUI中,当我现在运行程序并单击delete按钮时,我应该能够从通过libraryData填充数据的数据库中删除数据,我得到一个错误,这显然是问题所在。我将在下面发布所有详细信息 LibraryData.javaJava 无法从JTable中删除,java,sql,Java,Sql,我的表连接到一个从我的sql数据库填充的树映射,现在有两个类,LibraryData.java和Delete.java。其目的是,在delete.java的GUI中,当我现在运行程序并单击delete按钮时,我应该能够从通过libraryData填充数据的数据库中删除数据,我得到一个错误,这显然是问题所在。我将在下面发布所有详细信息 LibraryData.java import java.util.*; import javax.swing.JOptionPane; import javax.
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
}
}
这里是错误
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)
看看堆栈跟踪,它试图将字符串转换为整数
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
类,库由整数键控
private static Map<Integer, Item> library = new TreeMap<Integer, Item>();
好的,但名称是一个字符串,所以我必须在某个地方转换成字符串吗?它现在看起来像这个公共静态getName(int key){{Item Item=library.get(key);if(Item==null){return null;//null表示没有这样的项}else{return Item.name;}}}}
private static Map<Integer, Item> library = new TreeMap<Integer, Item>();
public static String getName(String key) {
Item item = library.get(key);