import java.awt.*;
import javax.swing.*;
import javax.swing.table.TableColumn;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.*;
public class Vec {
Frame f;
JTable table;
JScrollPane scrollPane;
TableColumn column;
ResultSetMetaData rsmd;
Vector columnHeads ;
Vector rows;
public static final String sq="select * from use_login";
Statement stmt;
Connection con;
public void getvVlue(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=Hospital;user=sa;password=sasa");
stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sq);
rsmd=rs.getMetaData();
columnHeads = new Vector();
rows = new Vector();
for(int i=1;i<=rsmd.getColumnCount();i++ ){
columnHeads.addElement(rsmd.getColumnName(i));
}
while(rs.next()){
for(int i=1;i<=rsmd.getColumnCount();i++){
rows.addElement(rs.getObject(i));
}
}
}
catch(Exception e ){
e.printStackTrace();
}
table =new JTable(rows,columnHeads);
scrollPane = new JScrollPane(table);
}
public Vec(){
getvVlue();
f=new Frame();
f.setBounds(250, 250, 300, 200);
}
public void lauch(){
f.add(scrollPane);
f.setVisible(true);
}
public static void main(String args[]){
new Vec().lauch();
}
}
看了 JTable的资料,写个程序连接数据库中的表 ,但是执行时抛出了Exception in thread "main" java.lang.ClassCastException: java.lang.Integer
at javax.swing.table.DefaultTableModel.justifyRows(Unknown Source)
at javax.swing.table.DefaultTableModel.setDataVector(Unknown Source)
at javax.swing.table.DefaultTableModel.<init>(Unknown Source)
at javax.swing.JTable.<init>(Unknown Source)
at Vec.getvVlue(Vec.java:56)不知道怎么解决,希望高手指导
这个异常是类型转换异常 Integer与另外一个类型进行强制转换发生的异常。
rsmd=rs.getMetaData();
columnHeads = new Vector();
rows = new Vector();
for(int i=1;i <=rsmd.getColumnCount();i++ ){
columnHeads.addElement(rsmd.getColumnName(i));
}
while(rs.next()){
for(int i=1;i <=rsmd.getColumnCount();i++){
rows.addElement(rs.getObject(i));
public JTable(Vector rowData,
Vector columnNames)构造 JTable,用来显示 Vectors 的 Vector (rowData) 中的值,其列名称为 columnNames。rowData 中包含的 Vectors 应该包含该行的值。换句话说,可以通过以下代码获取第 1 行,第 5 列单元格的值: ((Vector)rowData.elementAt(1)).elementAt(5);参数:
rowData - 新表的数据
columnNames - 每列的名称
这是JDK中对于JTable的构造函数,你在程序中用的
table =new JTable(rows,columnHeads);
其中的rows里的元素是不是应该是Vector类型的??
看到这个错误就知道是强制转换的错误了!!!
与Integer 这个类型之间的转型时,出错了.你的代码的56行在哪,你再看看啊
与Integer 这个类型之间的转型时,出错了.你的代码的56行在哪,你再看看啊
Constructs a JTable to display the values in the Vector of Vectors, rowData, with column names, columnNames. The Vectors contained in rowData should contain the values for that row. In other words, the value of the cell at row 1, column 5 can be obtained with the following code:
/*
*使用JTable(Vector rowData, Vector columnNames)这个构造方法时,rowData里面必须也是vector
*你目前的rows里面存放的并不是vector,所以JDK执行到
*((Vector)dataVector.elementAt(i)).setSize(getColumnCount());的时候,
*dataVector.elementAt(i)取出来的是个Integer,而需要的是个vector,所有就报了ClassCastException
*去查看下这个构造的使用方法就行了
*/
table =new JTable(rows,columnHeads); //第一个参数的问题,应该是一个存放着vector的vector
//把结果放进Vector 就好
while (rs.next()) {
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
Vector result = new Vector();
result.addElement(rs.getObject(i));
rows.addElement(result); } }
=========================
常见异常类型表示什么意思应该记住,这样才好做出判断,排查
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
Vector result = new Vector();
result.addElement(rs.getObject(i));
}
rows.addElement(result);
}