我把我的错误描述拿去网上搜索 最多的说法是在涉及数据库操作的语句没有try catch 可是我明明有try catch的...再发代码之前简单说一下我代码的功能.是一个Hotel MIS系统的一个模块 先做出图形界面 然后通过事件处理启动数据库操作
/*
 *
 *
 *****客房信息维护界面*****
 *
 *
 */
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.table.*;
 import java.util.*;
 import java.sql.*;
 
 public class roomFrame extends JFrame{
 
  Label l1,l2,l3,l4,l5,l6;
TextField t1,t2,t3,t4,t5;
TextArea ta;
Button b_query,b_all,b_new,b_modify,b_exit;
int dx=65,dy=0;
Vector cell,row;

String url="jdbc:odbc:Hotel";
String user="ZYX";
String password="";
String ls;


  public roomFrame(String ss){
  super(ss);
  setLayout(null); 
 
 
      try{     
 

    
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

final Connection con=DriverManager.getConnection(url,user,password);
final Statement stmt=con.createStatement(); 




dy=80;
 
  l1=new Label("请输入客房编号");
l1.setBounds(new Rectangle(20+dx,40+dy,100,20));
add(l1);
t1=new TextField();
t1.setBounds(new Rectangle(130+dx,40+dy,100,20));
add(t1);
b_query=new Button("查询");
b_query.setBounds(new Rectangle(250+dx,30+dy,70,40));
//查询按钮处理..................................
add(b_query);

b_all=new Button("显示全部信息");
b_all.setBounds(350+dx,30+dy,100,40);
b_all.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){



ls="select * from Room";
ResultSet rs=stmt.executeQuery(ls);



  row=new Vector();
  while(rs.next()){
  cell=new Vector();
  cell.add(rs.getString(1));
  cell.add(rs.getString(2));
  cell.add(rs.getString(3));
  cell.add(rs.getInt(4));
  cell.add(rs.getString(5));
  row.add(cell); 
         }   
         
         rs.close();
stmt.close();
con.close();    
     
       
        }



});



add(b_all);


dy=-60;

l2=new Label("房号");
l2.setBounds(new Rectangle(20+dx,100+dy,50,20));
add(l2);
t2=new TextField();
t2.setBounds(new Rectangle(80+dx,100+dy,100,20));
add(t2);
l3=new Label("客房状态");
l3.setBounds(new Rectangle(250+dx,100+dy,50,20));
add(l3);
t3=new TextField();
t3.setBounds(new Rectangle(310+dx,100+dy,90,20));
add(t3);
l4=new Label("客房级别");
l4.setBounds(new Rectangle(20+dx,130+dy,50,20));
add(l4);
t4=new TextField();
t4.setBounds(new Rectangle(80+dx,130+dy,100,20));
add(t4);
l5=new Label("备 注");
l5.setBounds(new Rectangle(250+dx,130+dy,30,20));
add(l5);
ta=new TextArea();
ta.setBounds(new Rectangle(310+dx,130+dy,100,50));
add(ta);
l6=new Label("单价");
l6.setBounds(new Rectangle(20+dx,160+dy,50,20));
add(l6);
t5=new TextField();
t5.setBounds(new Rectangle(80+dx,160+dy,100,20));
add(t5);

dy=-20;

b_new=new Button("新建");
b_new.setBounds(new Rectangle(100+dx,230+dy,70,40));
add(b_new);
b_exit=new Button("退出");
b_exit.setBounds(new Rectangle(250+dx,230+dy,70,40));
add(b_exit);




 
 
 
 
 
 
  String[] columnHeaders={"客房编号","客房状态","客房等级","客房单价","备注"
  };
  Vector columnHeaderName=new Vector();
  for(int i=0;i<columnHeaders.length;i++){
  columnHeaderName.add(columnHeaders[i]); 
  }
 
 
 
 
  DefaultTableModel tableModel=new DefaultTableModel();
  tableModel.setDataVector(row,columnHeaderName);
  JTable table=new JTable(tableModel);
  table.setRowHeight(20);
  table.setCursor(new Cursor(12));
  table.setSelectionBackground(Color.black);
     table.setSelectionForeground(Color.white);
     table.setGridColor(Color.black);
     table.setBackground(Color.white);//背景颜色
     table.setCellSelectionEnabled(false);    
       
     //setLayout(new FlowLayout());
     JScrollPane jsp=new JScrollPane(table); 
    jsp.setBounds(85,300,430,200);
    this.getContentPane().add(jsp);    
    this.setSize(600,600);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true); 
        
        }catch(SQLException sqle){
         System.out.println(1+sqle.toString());
         }
         catch(Exception e){
         System.out.println(2+e.toString());
        }  
        
           
          
       
    }//构造函数
    
     public static void main(String args[]){
    
        
     roomFrame rf=new roomFrame("客房信息管理"); 
    
    

    
         }
 }

解决方案 »

  1.   

    而另一段类似的代码却轻松的通过了编译 !!!!只是前2天能运行出结果 这次却不能了 也奇怪import java.sql.*;public class sqltest{
    public static void main(String args[]){
    String url="jdbc:odbc:LocalServer";
    String user="ZYX";
    String password="";
    String ls;

    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    Connection con=DriverManager.getConnection(url,user,password);
    Statement stmt=con.createStatement();
    ls="select * from Room";

    ResultSet rs=stmt.executeQuery(ls);
    System.out.print("sno  ");
    System.out.print("sname  ");
    System.out.print("sage  ");
    System.out.print("ssex ");
    System.out.println("dept  ");

    while(rs.next()){
    System.out.print(rs.getString(1)+"|");
    System.out.print(rs.getString(2)+"|");
    System.out.print(rs.getString(3)+"|");
    System.out.print(rs.getInt(4)+"|");
    System.out.println(rs.getString(5)+"|");
    }
    rs.close();
    stmt.close();
    con.close();
    }
    catch(SQLException e){
    System.out.print(1+e.toString());
    }
    catch(Exception e){
    System.out.print(2+e.toString());
    }
    }
    }
      

  2.   

    “未报告异常”的那一段,是在一个嵌套的类里边,这里边没报告异常:
    new ActionListener(){
                    public void actionPerformed(ActionEvent e){
                        ls="select * from Room";
                        ResultSet rs=stmt.executeQuery(ls);
                        row=new Vector();
                        while(rs.next()){
                            cell=new Vector();
                            cell.add(rs.getString(1));
                            cell.add(rs.getString(2));
                            cell.add(rs.getString(3));
                            cell.add(rs.getInt(4));
                            cell.add(rs.getString(5));
                            row.add(cell);
                        }
                        rs.close();
                        stmt.close();
                        con.close();
                    }
      

  3.   

    楼上的正解,你在这个时间响应的匿名类中访问了数据库,但是没有用try{}catch{}进行异常捕获
      

  4.   

    里面是一个匿名类,当然要有自己独立的try{}catch{}结构;而不是那种函数调用的嵌套可以在外层的try{}catch{}结构来捕获;
      

  5.   

    外层有try,那是外层的,里面的匿名类在编译时,生成一个单独的class,也要有它自己的try