import javax.swing.*;
import javax.swing.table.AbstractTableModel;import java.awt.*;
import java.sql.*;
import java.awt.event.*;
public class classQuery extends JPanel implements ActionListener{
/**
* 从数据库中读取数据做为组合框的小项,然后从中选出一项 查询数据库,显示出来
*/
private static final long serialVersionUID = 1L;
public classQuery(){
layout=new BorderLayout();
setLayout(layout);
northPanel=new JPanel();
className=new JComboBox();
northPanel.add(className);
add(northPanel,BorderLayout.NORTH);
try {
Class
.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=成绩管理系统"; String user = "sa";
String password = "";
conn = DriverManager.getConnection(url, user, password);
String sql="select * from 班级表";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
while(rs.next()){
className.addItem(rs.getString("班级名称"));
}
}catch (SQLException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
className.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String sql="select * from 学生成绩表 where 所属班级='"+className.getSelectedItem().toString().trim()+"'";
try {
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
model=new ResultSetTableModel(rs);
JTable table=new JTable(model);
scrollPanel=new JScrollPane(table);
add(scrollPanel,BorderLayout.CENTER);
validate();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
private JComboBox className;
private BorderLayout layout;
private JScrollPane scrollPanel;
private ResultSet rs;
private ResultSetTableModel model;
private JPanel northPanel;
private Connection conn = null;
private Statement stmt = null;
}
class ResultSetTableModel extends AbstractTableModel{ /**
*
*/
private static final long serialVersionUID = 1L; public ResultSetTableModel(ResultSet aResultSet){
rs=aResultSet;
try {
rsmd=(ResultSetTableModel) rs.getMetaData();
} catch (SQLException e) {
e.printStackTrace();
}
}
public String getColumnName(int c){
return rsmd.getColumnName(c+1);
}
public int getColumnCount() {
return rsmd.getColumnCount();
} public int getRowCount() {
try {
rs.last();
return rs.getRow();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
} public Object getValueAt(int r, int c) {
try {
rs.absolute(r+1);
return rs.getObject(c+1);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
private ResultSet rs;
private ResultSetTableModel rsmd;
}
这是报错 com.microsoft.jdbc.base.BaseResultSetMetaData cannot be cast to ResultSetTableModel 初次接触这个...不明白哪错了...只是说不能转换...
import javax.swing.table.AbstractTableModel;import java.awt.*;
import java.sql.*;
import java.awt.event.*;
public class classQuery extends JPanel implements ActionListener{
/**
* 从数据库中读取数据做为组合框的小项,然后从中选出一项 查询数据库,显示出来
*/
private static final long serialVersionUID = 1L;
public classQuery(){
layout=new BorderLayout();
setLayout(layout);
northPanel=new JPanel();
className=new JComboBox();
northPanel.add(className);
add(northPanel,BorderLayout.NORTH);
try {
Class
.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=成绩管理系统"; String user = "sa";
String password = "";
conn = DriverManager.getConnection(url, user, password);
String sql="select * from 班级表";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
while(rs.next()){
className.addItem(rs.getString("班级名称"));
}
}catch (SQLException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
className.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String sql="select * from 学生成绩表 where 所属班级='"+className.getSelectedItem().toString().trim()+"'";
try {
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
model=new ResultSetTableModel(rs);
JTable table=new JTable(model);
scrollPanel=new JScrollPane(table);
add(scrollPanel,BorderLayout.CENTER);
validate();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
private JComboBox className;
private BorderLayout layout;
private JScrollPane scrollPanel;
private ResultSet rs;
private ResultSetTableModel model;
private JPanel northPanel;
private Connection conn = null;
private Statement stmt = null;
}
class ResultSetTableModel extends AbstractTableModel{ /**
*
*/
private static final long serialVersionUID = 1L; public ResultSetTableModel(ResultSet aResultSet){
rs=aResultSet;
try {
rsmd=(ResultSetTableModel) rs.getMetaData();
} catch (SQLException e) {
e.printStackTrace();
}
}
public String getColumnName(int c){
return rsmd.getColumnName(c+1);
}
public int getColumnCount() {
return rsmd.getColumnCount();
} public int getRowCount() {
try {
rs.last();
return rs.getRow();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
} public Object getValueAt(int r, int c) {
try {
rs.absolute(r+1);
return rs.getObject(c+1);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
private ResultSet rs;
private ResultSetTableModel rsmd;
}
这是报错 com.microsoft.jdbc.base.BaseResultSetMetaData cannot be cast to ResultSetTableModel 初次接触这个...不明白哪错了...只是说不能转换...
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class classQuery extends JPanel implements ActionListener{
private static final long serialVersionUID = 1L;
public classQuery(){
layout=new BorderLayout();
setLayout(layout);
northPanel=new JPanel();
className=new JComboBox();
northPanel.add(className);
add(northPanel,BorderLayout.NORTH);
try {
Class
.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=system"; String user = "sa";
String password = "";
conn = DriverManager.getConnection(url, user, password);
String sql="select * from t_class";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
while(rs.next()){
className.addItem(rs.getString("classname"));
}
}catch (SQLException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
className.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String sql="select * from result where class='"+className.getSelectedItem().toString().trim()+"'";
try {
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
model=new ResultSetTableModel(rs);
JTable table=new JTable(model);
scrollPanel=new JScrollPane(table);
add(scrollPanel,BorderLayout.CENTER);
validate();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
private JComboBox className;
private BorderLayout layout;
private JScrollPane scrollPanel;
private ResultSet rs;
private ResultSetTableModel model;
private JPanel northPanel;
private Connection conn = null;
private Statement stmt = null;
}
import java.sql.ResultSet;
import java.sql.SQLException;import javax.swing.table.AbstractTableModel;class ResultSetTableModel extends AbstractTableModel
{ /**
*
*/
private static final long serialVersionUID = 1L; public ResultSetTableModel(ResultSet aResultSet)
{
rs = aResultSet;
try
{
rsmd = (ResultSetTableModel) rs.getMetaData();
}
catch(SQLException e)
{ e.printStackTrace();
}
} public String getColumnName(int c)
{
return rsmd.getColumnName(c + 1);
} public int getColumnCount()
{ return rsmd.getColumnCount();
} public int getRowCount()
{
try
{
rs.last();
return rs.getRow();
}
catch(SQLException e)
{ e.printStackTrace();
return 0;
} } public Object getValueAt(int r, int c)
{
try
{
rs.absolute(r + 1);
return rs.getObject(c + 1);
}
catch(SQLException e)
{ e.printStackTrace();
return null;
} } private ResultSet rs; private ResultSetTableModel rsmd;
}
不能从**类型到**类型的转化
你转化错误,仔细检查下
是这句报错的吧:在ResultSetTableModel.java里
rsmd=(ResultSetTableModel) rs.getMetaData();
就调用ResultSetMetaData的方法。比如你要实现getColumnName方法实现可以这样:
public String getColumnName(int c)
{
String colName = "";
try
{
colName = rsmd.getColumnLabel(c + 1);// java.sql.ResultSetMetaData rsmd
}
catch(SQLException e)
{
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return colName;
}
就是当我第二次选则 JComboBox 的值的时候,
无法刷新你的table。
你自己再改改吧。
import java.sql.ResultSet;
import java.sql.SQLException;import javax.swing.table.AbstractTableModel;
class ResultSetTableModel extends AbstractTableModel
{
private static final long serialVersionUID = 1L; public ResultSetTableModel(ResultSet aResultSet)
{
rs = aResultSet;
try
{
rsmd = (java.sql.ResultSetMetaData) rs.getMetaData();
}
catch(SQLException e)
{ e.printStackTrace();
}
} public String getColumnName(int c)
{
String colName = "";
try
{
colName = rsmd.getColumnLabel(c + 1);// java.sql.ResultSetMetaData rsmd
}
catch(SQLException e)
{
e.printStackTrace();
}
return colName;
} public int getColumnCount()
{
int count = 0;
try
{
count = rsmd.getColumnCount();
}
catch(SQLException e)
{
e.printStackTrace();
}
return count;
} public int getRowCount()
{
try
{
rs.last();
return rs.getRow();
}
catch(SQLException e)
{ e.printStackTrace();
return 0;
} } public Object getValueAt(int r, int c)
{
try
{
rs.absolute(r + 1);
return rs.getObject(c + 1);
}
catch(SQLException e)
{ e.printStackTrace();
return null;
} } private ResultSet rs; private java.sql.ResultSetMetaData rsmd;
}
public ResultSetTableModel(ResultSet aResultSet){
rs=aResultSet;
try {
rsmd=(ResultSetTableModel) rs.getMetaData();
} catch (SQLException e) {
e.printStackTrace();
}
} 红色的部分可以转么???AbstractTableModel = ResultSetMetaData???