求救阿!我的毕业设计 现在正在做之中 有一个问题 需要大家解决 好像不难啊,做一个数据库连接,然后Table一下就OK了~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的mail:[email protected]发给我一份吧,应该很简单. 我的mail:[email protected]发给我一份吧,应该很简单. 能不能用这个帮我改一下这个是一个表格程序 数据库我已经连上了谢谢import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.table.*;import javax.swing.event.*;import java.sql.*;import com.bruceeckel.swing.*;public class Table extends JApplet { Connection con; String url="jdbc:odbc:xu"; JTextArea txt = new JTextArea(4, 20); // The TableModel controls all the data: class DataModel extends AbstractTableModel { Object[][] data = { {"one", "two", "three", "four"}, {"five", "six", "seven", "eight"}, {"nine", "ten", "eleven", "twelve"}, {"1","2","3","4"}, }; // Prints data when table changes: class TML implements TableModelListener { public void tableChanged(TableModelEvent e){ txt.setText(""); // Clear it for(int i = 0; i < data.length; i++) { for(int j = 0; j < data[0].length; j++) txt.append(data[i][j] + " "); txt.append("\n"); } } } public DataModel() { addTableModelListener(new TML()); } public int getColumnCount() { return data[0].length; } public int getRowCount() { return data.length; } public Object getValueAt(int row, int col) { return data[row][col]; } public void setValueAt(Object val, int row, int col) { data[row][col] = val; // Indicate the change has happened: fireTableDataChanged(); } public boolean isCellEditable(int row, int col) { return true; } } public void init() { Container cp = getContentPane(); JTable table = new JTable(new DataModel()); cp.add(new JScrollPane(table)); cp.add(BorderLayout.SOUTH, txt); } void DBConnect(String url) { try { String driver="sun.jdbc.odbc.JdbcOdbcDriver"; Class.forName(driver); con=DriverManager.getConnection(url,"",""); } catch(SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) { Console.run(new Table(), 350, 200); }} ///:~这是变成思想上的一个程序 是这样吗JTable jTable1 = new JTable();但下一步怎么做 import com.bruceeckel.swing.*;这个抱好像是bruceeckel的,你也有? 这个就是我要做的一部分 能帮我改改嘛?谢谢了import java.awt.*;import javax.swing.*;import java.sql.*;import java.util.Vector;import javax.swing.table.AbstractTableModel;import javax.swing.event.TableModelEvent; public class People extends JFrame { //private JTable jTable1 = new JTable(); private Label label1 = new Label(); String[] columnNames = {}; Vector rows = new Vector(); ResultSetMetaData metaData; Frame frame=new Frame("操作人员管理"); Connection con; String url="jdbc:odbc:xu"; private JTable jTable1 = new JTable(); public People() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { //jTable1.setToolTipText(""); label1.setFont(new java.awt.Font("Dialog", 1, 15)); label1.setText("人员操作"); //this.getContentPane().add(jTable1, BorderLayout.CENTER); jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); this.getContentPane().add(label1,BorderLayout.NORTH); this.getContentPane().add(jTable1, BorderLayout.CENTER); } public int getColumnCount() { return columnNames.length; } void DBConnect(String url) { try{ String driver="sun.jdbc.odbc.JdbcOdbc"; Class.forName(driver); con=DriverManager.getConnection(url,"",""); } catch(SQLException e) { } catch (ClassNotFoundException e) { e.printStackTrace(); } } void DBClose(){ try{ con.close(); }catch(SQLException e) {} } ResultSet queryDB(String qry){ ResultSet rs=null; try{ Statement stmt= con.createStatement (); metaData = rs.getMetaData(); int numberOfColumns = metaData.getColumnCount(); columnNames = new String[numberOfColumns]; rs= stmt.executeQuery(qry); for(int column = 0; column < numberOfColumns; column++) { columnNames[column] = metaData.getColumnLabel(column+1); } rows = new Vector(); while (rs.next()) { Vector newRow = new Vector(); for (int i = 1; i <= getColumnCount(); i++) { newRow.addElement(rs.getObject(i)); } rows.addElement(newRow); } //System.out.println("EXECUTED QUERY ---> " + qry); }catch(SQLException e2){ } return rs; }}中间有很多费语句 那位大哥能帮我改改 小弟感激不尽阿 import java.util.Vector;import javax.swing.table.*;import java.sql.*;/** * * @author Administrator */class ResultSetTableModel extends AbstractTableModel{ protected Vector columnHeaders; protected Vector tableData; public ResultSetTableModel(ResultSet rset) throws SQLException{ Vector rowData; ResultSetMetaData rsmd=rset.getMetaData(); int count=rsmd.getColumnCount(); columnHeaders=new Vector(count); tableData=new Vector(); for(int i=1;i<=count;i++){ columnHeaders.addElement(rsmd.getColumnName(i)); } while(rset.next()){ rowData=new Vector(count); for(int i=1;i<=count;i++){ rowData.addElement(rset.getObject(i)); } tableData.addElement(rowData); } } public int getColumnCount(){ return columnHeaders.size(); } public int getRowCount(){ return tableData.size(); } public Object getValueAt(int row,int column){ Vector rowData=(Vector)(tableData.elementAt(row)); return rowData.elementAt(column); } public boolean isCellEditable(int row, int column){ return false; } public String getColumnName(int column){ return (String)(columnHeaders.elementAt(column)); }}上面的代码是通用的只要你给他一个resultset就好了(你应该已经拿到纪录集了吧,因为你已经连接好数据库了)然后用下面的代码设置JTable就可以了try{ JTable.setModel(new ResultSetTableModel(rs));}catch(Exception e){ e.printStackTrace();} 我刚找到一段不错的代码,已经运行过了你看一下吧import javax.swing.JTable;import javax.swing.JScrollPane;import javax.swing.JPanel;import javax.swing.JFrame;import java.awt.*;import java.awt.event.*;public class SimpleTableDemo extends JFrame { private boolean DEBUG = true; public SimpleTableDemo() { super("SimpleTableDemo"); Object[][] data = { {"Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false)}, {"Alison", "Huml", "Rowing", new Integer(3), new Boolean(true)}, {"Kathy", "Walrath", "Chasing toddlers", new Integer(2), new Boolean(false)}, {"Mark", "Andrews", "Speed reading", new Integer(20), new Boolean(true)}, {"Angela", "Lih", "Teaching high school", new Integer(4), new Boolean(false)} }; String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"}; final JTable table = new JTable(data, columnNames); table.setPreferredScrollableViewportSize(new Dimension(500, 70)); if (DEBUG) { table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { printDebugData(table); } }); } //Create the scroll pane and add the table to it. JScrollPane scrollPane = new JScrollPane(table); //Add the scroll pane to this window. getContentPane().add(scrollPane, BorderLayout.CENTER); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } private void printDebugData(JTable table) { int numRows = table.getRowCount(); int numCols = table.getColumnCount(); javax.swing.table.TableModel model = table.getModel(); System.out.println("Value of data: "); for (int i=0; i < numRows; i++) { System.out.print(" row " + i + ":"); for (int j=0; j < numCols; j++) { System.out.print(" " + model.getValueAt(i, j)); } System.out.println(); } System.out.println("--------------------------"); } public static void main(String[] args) { SimpleTableDemo frame = new SimpleTableDemo(); frame.pack(); frame.setVisible(true); }} 我把这个程序 改了一下 能够编译 但运行起来 出现异常 我已经知道什么毛病但不知道怎么改啊 我把错误指出来 大家帮我看看import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;import java.util.Vector;import javax.swing.table.*;class Login extends Frame { Connection con; String url = "jdbc:odbc:Xu"; ResultSetTableModel rst; JTable table=new JTable(rst.columnHeaders,rst.tableData); //错误就在上面我给这个表富了两个值是下面类中的 一个是表的字段 //一条是纪录 但为什么不对呢 大家能帮我改改吗 我想这个地方改了别的地方也应//该没问题了 Login(){ setLayout(new FlowLayout()); try{ DBConnect(url); ResultSet rs=queryDB("SELECT * FROM Publishers"); rst=new ResultSetTableModel(rs); }catch(SQLException e1){ } add(table); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { DBClose(); System.exit(0); } }); setSize(300,300); setVisible(true); } void DBConnect(String url){ try { String driver ="sun.jdbc.odbc.JdbcOdbcDriver"; Class.forName(driver); System.out.println("LOADED DRIVER ---> " + driver); con = DriverManager.getConnection (url, "", ""); System.out.println("CONNECTED TO ---> "+ url); }catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } void DBClose(){ try{ con.close(); }catch(SQLException e) { } } ResultSet queryDB(String qry){ ResultSet rs=null; try{ Statement stmt= con.createStatement (); rs= stmt.executeQuery(qry); System.out.println("EXECUTED QUERY ---> " + qry); }catch(SQLException e2){ } return rs; } public static void main(String[] args) { Login login=new Login(); }}class ResultSetTableModel extends AbstractTableModel{ Vector columnHeaders; Vector tableData; public ResultSetTableModel(ResultSet rs) throws SQLException{ Vector rowData; ResultSetMetaData rsmd=rs.getMetaData(); int count=rsmd.getColumnCount(); columnHeaders=new Vector(count); tableData=new Vector(); for(int i=1;i<=count;i++){ columnHeaders.addElement(rsmd.getColumnName(i)); } while(rs.next()){ rowData=new Vector(count); for(int i=1;i<=count;i++){ rowData.addElement(rs.getObject(i)); } tableData.addElement(rowData); } } public int getColumnCount(){ return columnHeaders.size(); } public int getRowCount(){ return tableData.size(); } public Object getValueAt(int row,int column){ Vector rowData=(Vector)(tableData.elementAt(row)); return rowData.elementAt(column); } public boolean isCellEditable(int row, int column){ return false; } public String getColumnName(int column){ return (String)(columnHeaders.elementAt(column)); }} 呵呵到现在才看到不好意思拉我给你的那个类需要一个打开的纪录集,也就是说你的记录集必须有下面这样的一个过程Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery("查询语句");这样的查询传给ResultSetTableModel才有用的另外你的JTable table=new JTable(rst.columnHeaders,rst.tableData);这一行代码要修改层下面这样JTable table=new JTable();table.setModel(new ResultSetTableModel(rs));这样问题基本就解决了 请看看 我把他家在了上面 但出现错误 说无法解析符号为什么import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;import java.util.Vector;import javax.swing.table.*;class Login extends Frame { Connection con; String url = "jdbc:odbc:Xu"; ResultSet rs; ResultSetTableModel rst; JTable table=new JTable(); //table.setModel(new ResultSetTableModel(rs)); //就是上面的这个地方 我有什么错误吗 Login(){ setLayout(new FlowLayout()); try{ DBConnect(url); rs=queryDB("SELECT * FROM Publishers"); //rst=new ResultSetTableModel(rs); }catch(SQLException e1){ } add(table); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { DBClose(); System.exit(0); } }); setSize(300,300); setVisible(true); } void DBConnect(String url){ try { String driver ="sun.jdbc.odbc.JdbcOdbcDriver"; Class.forName(driver); System.out.println("LOADED DRIVER ---> " + driver); con = DriverManager.getConnection (url, "", ""); System.out.println("CONNECTED TO ---> "+ url); }catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } void DBClose(){ try{ con.close(); }catch(SQLException e) { } } ResultSet queryDB(String qry){ ResultSet rs=null; try{ Statement stmt= con.createStatement (); rs= stmt.executeQuery(qry); //System.out.println("EXECUTED QUERY ---> " + qry); }catch(SQLException e2){ } return rs; } public static void main(String[] args) { Login login=new Login(); }}class ResultSetTableModel extends AbstractTableModel{ Vector columnHeaders; Vector tableData; public ResultSetTableModel(ResultSet rs) throws SQLException{ Vector rowData; ResultSetMetaData rsmd=rs.getMetaData(); int count=rsmd.getColumnCount(); columnHeaders=new Vector(count); tableData=new Vector(); for(int i=1;i<=count;i++){ columnHeaders.addElement(rsmd.getColumnName(i)); } while(rs.next()){ rowData=new Vector(count); for(int i=1;i<=count;i++){ rowData.addElement(rs.getObject(i)); } tableData.addElement(rowData); } } public int getColumnCount(){ return columnHeaders.size(); } public int getRowCount(){ return tableData.size(); } public Object getValueAt(int row,int column){ Vector rowData=(Vector)(tableData.elementAt(row)); return rowData.elementAt(column); } public boolean isCellEditable(int row, int column){ return false; } public String getColumnName(int column){ return (String)(columnHeaders.elementAt(column)); }} 中文截取的乱码问题 java怎么给数据库加行锁(事务处理) 关于readline()的问题 小程序错误!请教高手! Jlist列表框为什么只能显示一个数据 尚学堂网络类似QQ的项目编程怎么实现.的. 第十章网络第5节开始那小段视频. 求教paint(),repaint(),update() 的问题--如何设计一个画画板??? 有个简单问题请各位大哥帮忙, 100分求教,不够再开贴再加:)多线程之间的调剂问题(类似flashget的) 一个关于引用及类与类关系的问题请教! 求日文系统下的翻译软件! 大家好,我是个新手,有个问题想问一下?
发给我一份吧,应该很简单.
发给我一份吧,应该很简单.
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.sql.*;
import com.bruceeckel.swing.*;public class Table extends JApplet {
Connection con;
String url="jdbc:odbc:xu";
JTextArea txt = new JTextArea(4, 20);
// The TableModel controls all the data:
class DataModel extends AbstractTableModel {
Object[][] data = {
{"one", "two", "three", "four"},
{"five", "six", "seven", "eight"},
{"nine", "ten", "eleven", "twelve"},
{"1","2","3","4"},
};
// Prints data when table changes:
class TML implements TableModelListener {
public void tableChanged(TableModelEvent e){
txt.setText(""); // Clear it
for(int i = 0; i < data.length; i++) {
for(int j = 0; j < data[0].length; j++)
txt.append(data[i][j] + " ");
txt.append("\n");
}
}
}
public DataModel() {
addTableModelListener(new TML());
}
public int getColumnCount() {
return data[0].length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public void
setValueAt(Object val, int row, int col) {
data[row][col] = val;
// Indicate the change has happened:
fireTableDataChanged();
}
public boolean
isCellEditable(int row, int col) {
return true;
}
}
public void init() {
Container cp = getContentPane();
JTable table = new JTable(new DataModel());
cp.add(new JScrollPane(table));
cp.add(BorderLayout.SOUTH, txt);
}
void DBConnect(String url)
{
try
{
String driver="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
con=DriverManager.getConnection(url,"","");
}
catch(SQLException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Console.run(new Table(), 350, 200);
}
} ///:~这是变成思想上的一个程序
这个抱好像是bruceeckel的,你也有?
import javax.swing.*;
import java.sql.*;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
import javax.swing.event.TableModelEvent; public class People extends JFrame {
//private JTable jTable1 = new JTable();
private Label label1 = new Label();
String[] columnNames = {};
Vector rows = new Vector();
ResultSetMetaData metaData;
Frame frame=new Frame("操作人员管理");
Connection con;
String url="jdbc:odbc:xu";
private JTable jTable1 = new JTable();
public People() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
//jTable1.setToolTipText("");
label1.setFont(new java.awt.Font("Dialog", 1, 15));
label1.setText("人员操作");
//this.getContentPane().add(jTable1, BorderLayout.CENTER);
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
this.getContentPane().add(label1,BorderLayout.NORTH);
this.getContentPane().add(jTable1, BorderLayout.CENTER);
}
public int getColumnCount() {
return columnNames.length;
}
void DBConnect(String url)
{
try{
String driver="sun.jdbc.odbc.JdbcOdbc";
Class.forName(driver);
con=DriverManager.getConnection(url,"","");
}
catch(SQLException e)
{
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
void DBClose(){
try{
con.close();
}catch(SQLException e)
{}
}
ResultSet queryDB(String qry){
ResultSet rs=null;
try{
Statement stmt= con.createStatement ();
metaData = rs.getMetaData();
int numberOfColumns = metaData.getColumnCount();
columnNames = new String[numberOfColumns];
rs= stmt.executeQuery(qry);
for(int column = 0; column < numberOfColumns; column++) {
columnNames[column] = metaData.getColumnLabel(column+1);
}
rows = new Vector();
while (rs.next()) {
Vector newRow = new Vector();
for (int i = 1; i <= getColumnCount(); i++) {
newRow.addElement(rs.getObject(i));
}
rows.addElement(newRow);
}
//System.out.println("EXECUTED QUERY ---> " + qry);
}catch(SQLException e2){
}
return rs;
}
}
中间有很多费语句 那位大哥能帮我改改 小弟感激不尽阿
import javax.swing.table.*;
import java.sql.*;/**
*
* @author Administrator
*/
class ResultSetTableModel extends AbstractTableModel{
protected Vector columnHeaders;
protected Vector tableData;
public ResultSetTableModel(ResultSet rset) throws SQLException{
Vector rowData;
ResultSetMetaData rsmd=rset.getMetaData();
int count=rsmd.getColumnCount();
columnHeaders=new Vector(count);
tableData=new Vector();
for(int i=1;i<=count;i++){
columnHeaders.addElement(rsmd.getColumnName(i));
}
while(rset.next()){
rowData=new Vector(count);
for(int i=1;i<=count;i++){
rowData.addElement(rset.getObject(i));
}
tableData.addElement(rowData);
}
}
public int getColumnCount(){
return columnHeaders.size();
}
public int getRowCount(){
return tableData.size();
}
public Object getValueAt(int row,int column){
Vector rowData=(Vector)(tableData.elementAt(row));
return rowData.elementAt(column);
}
public boolean isCellEditable(int row, int column){
return false;
}
public String getColumnName(int column){
return (String)(columnHeaders.elementAt(column));
}
}上面的代码是通用的只要你给他一个resultset就好了(你应该已经拿到纪录集了吧,因为你已经连接好数据库了)然后用下面的代码设置JTable就可以了try{
JTable.setModel(new ResultSetTableModel(rs));
}catch(Exception e){
e.printStackTrace();
}
你看一下吧
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;public class SimpleTableDemo extends JFrame {
private boolean DEBUG = true; public SimpleTableDemo() {
super("SimpleTableDemo"); Object[][] data = {
{"Mary", "Campione",
"Snowboarding", new Integer(5), new Boolean(false)},
{"Alison", "Huml",
"Rowing", new Integer(3), new Boolean(true)},
{"Kathy", "Walrath",
"Chasing toddlers", new Integer(2), new Boolean(false)},
{"Mark", "Andrews",
"Speed reading", new Integer(20), new Boolean(true)},
{"Angela", "Lih",
"Teaching high school", new Integer(4), new Boolean(false)}
}; String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"}; final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70)); if (DEBUG) {
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
printDebugData(table);
}
});
} //Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table); //Add the scroll pane to this window.
getContentPane().add(scrollPane, BorderLayout.CENTER); addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} private void printDebugData(JTable table) {
int numRows = table.getRowCount();
int numCols = table.getColumnCount();
javax.swing.table.TableModel model = table.getModel(); System.out.println("Value of data: ");
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + model.getValueAt(i, j));
}
System.out.println();
}
System.out.println("--------------------------");
} public static void main(String[] args) {
SimpleTableDemo frame = new SimpleTableDemo();
frame.pack();
frame.setVisible(true);
}
}
但不知道怎么改啊 我把错误指出来 大家帮我看看
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import java.util.Vector;
import javax.swing.table.*;
class Login extends Frame
{
Connection con;
String url = "jdbc:odbc:Xu";
ResultSetTableModel rst;
JTable table=new JTable(rst.columnHeaders,rst.tableData);
//错误就在上面我给这个表富了两个值是下面类中的 一个是表的字段
//一条是纪录 但为什么不对呢 大家能帮我改改吗 我想这个地方改了别的地方也应//该没问题了
Login(){
setLayout(new FlowLayout());
try{
DBConnect(url);
ResultSet rs=queryDB("SELECT * FROM Publishers");
rst=new ResultSetTableModel(rs);
}catch(SQLException e1){
}
add(table);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{ DBClose();
System.exit(0);
}
});
setSize(300,300);
setVisible(true);
} void DBConnect(String url){
try {
String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
System.out.println("LOADED DRIVER ---> " + driver);
con =
DriverManager.getConnection (url, "", "");
System.out.println("CONNECTED TO ---> "+ url);
}catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
void DBClose(){
try{
con.close();
}catch(SQLException e)
{
}
}
ResultSet queryDB(String qry){
ResultSet rs=null;
try{
Statement stmt= con.createStatement ();
rs= stmt.executeQuery(qry);
System.out.println("EXECUTED QUERY ---> " + qry);
}catch(SQLException e2){
}
return rs;
}
public static void main(String[] args)
{
Login login=new Login();
}}
class ResultSetTableModel extends AbstractTableModel{
Vector columnHeaders;
Vector tableData;
public ResultSetTableModel(ResultSet rs) throws SQLException{
Vector rowData;
ResultSetMetaData rsmd=rs.getMetaData();
int count=rsmd.getColumnCount();
columnHeaders=new Vector(count);
tableData=new Vector();
for(int i=1;i<=count;i++){
columnHeaders.addElement(rsmd.getColumnName(i));
}
while(rs.next()){
rowData=new Vector(count);
for(int i=1;i<=count;i++){
rowData.addElement(rs.getObject(i));
}
tableData.addElement(rowData);
}
}
public int getColumnCount(){
return columnHeaders.size();
}
public int getRowCount(){
return tableData.size();
}
public Object getValueAt(int row,int column){
Vector rowData=(Vector)(tableData.elementAt(row));
return rowData.elementAt(column);
}
public boolean isCellEditable(int row, int column){
return false;
}
public String getColumnName(int column){
return (String)(columnHeaders.elementAt(column));
}
}
到现在才看到不好意思拉我给你的那个类需要一个打开的纪录集,也就是说你的记录集必须有下面这样的一个过程Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("查询语句");这样的查询传给ResultSetTableModel才有用的
另外你的
JTable table=new JTable(rst.columnHeaders,rst.tableData);
这一行代码要修改层下面这样
JTable table=new JTable();
table.setModel(new ResultSetTableModel(rs));这样问题基本就解决了
为什么import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import java.util.Vector;
import javax.swing.table.*;
class Login extends Frame
{
Connection con;
String url = "jdbc:odbc:Xu";
ResultSet rs;
ResultSetTableModel rst;
JTable table=new JTable();
//table.setModel(new ResultSetTableModel(rs));
//就是上面的这个地方 我有什么错误吗
Login(){
setLayout(new FlowLayout());
try{
DBConnect(url);
rs=queryDB("SELECT * FROM Publishers");
//rst=new ResultSetTableModel(rs);
}catch(SQLException e1){
}
add(table);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{ DBClose();
System.exit(0);
}
});
setSize(300,300);
setVisible(true);
} void DBConnect(String url){
try {
String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
System.out.println("LOADED DRIVER ---> " + driver);
con =
DriverManager.getConnection (url, "", "");
System.out.println("CONNECTED TO ---> "+ url);
}catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
void DBClose(){
try{
con.close();
}catch(SQLException e)
{
}
}
ResultSet queryDB(String qry){
ResultSet rs=null;
try{
Statement stmt= con.createStatement ();
rs= stmt.executeQuery(qry);
//System.out.println("EXECUTED QUERY ---> " + qry);
}catch(SQLException e2){
}
return rs;
}
public static void main(String[] args)
{
Login login=new Login();
}}
class ResultSetTableModel extends AbstractTableModel{
Vector columnHeaders;
Vector tableData;
public ResultSetTableModel(ResultSet rs) throws SQLException{
Vector rowData;
ResultSetMetaData rsmd=rs.getMetaData();
int count=rsmd.getColumnCount();
columnHeaders=new Vector(count);
tableData=new Vector();
for(int i=1;i<=count;i++){
columnHeaders.addElement(rsmd.getColumnName(i));
}
while(rs.next()){
rowData=new Vector(count);
for(int i=1;i<=count;i++){
rowData.addElement(rs.getObject(i));
}
tableData.addElement(rowData);
}
}
public int getColumnCount(){
return columnHeaders.size();
}
public int getRowCount(){
return tableData.size();
}
public Object getValueAt(int row,int column){
Vector rowData=(Vector)(tableData.elementAt(row));
return rowData.elementAt(column);
}
public boolean isCellEditable(int row, int column){
return false;
}
public String getColumnName(int column){
return (String)(columnHeaders.elementAt(column));
}
}