增加对结果的判断:
rs=sm.executeQuery(query);if(rs == null) {
   System.out.println("结果为空");
}else {
//在表格中显示结果
displayResultSet(rs); 
}

解决方案 »

  1.   

    找到了!在构造函数中!你的本意是定义了一个全局的con 、sm等,
             Connection con=null;
    Statement sm=null;//用来执行SQL语句,并取得执行结果
    ResultSet rs=null;//用来封装接收数据库查询结果的对象
    你也是这么做的,可在下面的构造函数中,你又定义了一次con、sm,等于是局部变量了,所以全局变量还是没有值!
    所以你在getTable()中调用时con是空的(null)!所以报错!
    改正看下面,其实说到这儿我相信你肯定会了!public ShowAuthTab()
    {
    super("woodfire");
    setSize(800,400);
    c=getContentPane();
    c.setLayout(new FlowLayout());
    label=new JLabel("数据显示:");
    try
    {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException e)
    {
    System.out.println("SQLException:"+e.getMessage());
    }
    try
    {
    Connection con=DriverManager.getConnection ("jdbc:odbc:bookTab");//看这儿,错了!
    Statement sm=con.createStatement();
                              //看这儿,你又定义了一次sm和con,就是局部的了!
    }
    catch(SQLException e)
    {
     System.out.println("SQLException:"+e.getMessage());
    }
    show();
        getTable();
    }改正如下,去掉局部变量的定义!
    try
    {
      con=DriverManager.getConnection ("jdbc:odbc:bookTab");//已改了!
      sm=con.createStatement();
                    //看这儿,已改了,直接用就行了,con是全局的呀,已定义
    }
    catch(SQLException e)
    {
     System.out.println("SQLException:"+e.getMessage());
    }
    show();
        getTable();
    }
    就上面两个错!
    不错,我也学习了不少!
      

  2.   

    其实你下面的getTable()中:public void getTable()
        {
    String query="select * from BookTab";
    try
    {
    sm=con.createStatement();
       //这一句也可以不要,你上面已经做了这个工作拉,在构造函数中!