我是java新手 第一次用jdbc连接oracle 数据库时出险了这个问题 java.lang.String

我的代码如下
/**
* 从oracle数据库中取出学生信息
*/
package com.test3;
import javax.swing.*;
import java.awt.*;
import java.sql.*;
import java.util.*;
import java.awt.event.*;
import java.sql.ResultSet;
public class Test2 extends JFrame {
//rowDate用来存放行数据,columnNames存放行数据
Vector rowDate, columnNames;
JTable jt;
JScrollPane jsp=null;
//定义操作数据库需要的东西
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 test2=new Test2();
}
public Test2()
{
columnNames=new Vector();
//设置列明
columnNames.add("学号");
columnNames.add("名字");
columnNames.add("性别");
columnNames.add("籍贯");
columnNames.add("系别");
rowDate=new Vector();
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
ct=DriverManager.getConnection("jdbc:ORACLE:thin:@localhost:1521:oracle", "scott", "tiger");
ps=ct.prepareStatement("select * from stu");
rs=ps.executeQuery();
while(rs.next())
{
//rowDate可以存放多行
Vector hang=new Vector();
hang.add(rs.getString("stuId"));
hang.add(rs.getString("stuName"));
hang.add(rs.getString("stuSex"));
hang.add(rs.getString("stuJg"));
hang.add(rs.getString("stuDEPT"));
//加入到rowdate
rowDate=new Vector(hang);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("数据库连接失败" + e.getMessage());
}finally{
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(ct!=null) ct.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库连接失败" + e.getMessage());
}
}
//初始化JTable
------------------从这里就开始出险问题了
jt=new JTable(rowDate,columnNames);
//初始化jsp JScrollPane
jsp=new JScrollPane(jt);
//把jsp放到jframe
this.add(jsp);
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
我的表是
create table STU
(
STUID VARCHAR2(30) not null,
STUNAME VARCHAR2(50) not null,
STUSEX CHAR(2) default '男',
STUJG VARCHAR2(30),
STUDEPT VARCHAR2(40)
)
问题 是
Exception in thread "main" java.lang.ClassCastException: java.lang.String
at javax.swing.table.DefaultTableModel.justifyRows(DefaultTableModel.java:242)
可以证明 连接数据库是没有问题的
最新回答
叶抖颤飘雪

2024-04-21 00:36:19

Vector 这种方式添加表格数据,我没用过,我给你改了一下。你看一下,这个在你那里运行能不能成功?

有问题再联系。

/**
* 从oracle数据库中取出学生信息
*/
package com.test3;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Test2 extends JFrame {
// rowDate用来存放行数据,columnNames存放行数据
DefaultTableModel model = null;
JTable jt;
JScrollPane jsp = null;
// 定义操作数据库需要的东西
PreparedStatement ps = null;
Connection ct = null;
ResultSet rs = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 test2 = new Test2();
}
public Test2() {
// 设置列明
String[] columnNames = { "学号", "名字", "性别", "籍贯", "系别" };
// 初始化JTable
// ------------------从这里就开始出险问题了
model = new DefaultTableModel(columnNames, 0);
jt = new JTable(model);
// 初始化jsp JScrollPane
jsp = new JScrollPane(jt);
addRow();
// 把jsp放到jframe
this.add(jsp);
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
private void addRow() {
try {
// 1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
ct = DriverManager
.getConnection("jdbc:ORACLE:thin:@localhost:1521:oracle",
"scott", "tiger");
ps = ct.prepareStatement("select * from stu");
rs = ps.executeQuery();
while (rs.next()) {
// rowDate可以存放多行
Vector hang = new Vector();
String[] row = { rs.getString("stuId"),
rs.getString("stuName"), rs.getString("stuSex"),
rs.getString("stuJg"), rs.getString("stuDEPT") };
// 加入到rowdate
model.addRow(row);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("数据库连接失败" + e.getMessage());
} finally {
try {
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (ct != null)
ct.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库连接失败" + e.getMessage());
}
}
}
}

薅藤已蔓蔆

2024-04-21 00:36:03

类转换错误,对jswing不是特别熟悉,以下意见仅供参考:
你的结构是不是有问题?
JTable的构造函数是JTable(Object[][] rowData, Object[] columnNames)
首先你确认vector是否好用,没怎么用过这个类,一直用list
另外
//加入到rowdate
rowDate=new Vector(hang);

这儿不应该是加入到rowDate中吗,
rowDate的初始化放在while循环外,循环里面rowDate.add(new Vector(hang))
贴心小棉袄

2024-04-21 00:26:03

没有楼上的几个说的那么复杂,其实就是你字符串字段出现错误了。
追问
可以指出来吗?我应该怎修改那。谢谢您的回答
追答
你点下错误的行数,看看是跳到具体的哪一行,发给我看看。
浅笑等壹个晴天

2024-04-21 00:47:51

典型的写代码不用心。
//加入到rowdate
rowDate=new Vector(hang);
改为:
rowDate.add(hang);
梦中你是主角

2024-04-21 01:17:09

你的一些控件应该new在test2的构造方法里吧,你现在test2构造方法里什么都没有,new出来的对象不是什么都有没有吗