Chcę wyświetlić tabelę z bazy w javie. Ale nic się nie pokazuje tylko puste okno. Mam taki kod
[syntax="Java"]
import java.sql.;
import javax.swing.
;
import javax.swing.table.AbstractTableModel;

public class Tabela extends JPanel {

    private Connection con;
    private Statement stat;
    private ResultSet res;
    private JTable tab;
   

public Tabela(){

tab = new JTable(new Model(res));
add(tab);
JScrollPane jsp = new JScrollPane(tab);
add(jsp);

try{
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl",
                                                 "user",
                                                 "pass");
    DatabaseMetaData Datmeta = con.getMetaData();
    System.out.println(Datmeta.supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY));
    Statement stat = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
    res = stat.executeQuery("SELECT * FROM psy");
    stat.close();
    con.close();
 }
 catch(SQLException e){

 }

}

 private static void Show() {
    JFrame frame = new JFrame("Tabela");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            Show();
        }
    });
}  

}

[/syntax]

I model tabeli:
[syntax="Java"]
class Model extends AbstractTableModel{
private ResultSet res;
private ResultSetMetaData resmd;

    public Model(ResultSet aResultSet){
            res = aResultSet;
            try{
                resmd = res.getMetaData();
            }
            catch(SQLException e){
                e.printStackTrace();
            }
    }

    public String getColumnName(int c){
            try{
                return resmd.getColumnName(c+1);
            }
            catch(SQLException e){
                e.printStackTrace();
                return "";
            }
    }

    public int getColumnCount(){ 
            try{
                return resmd.getColumnCount();
            }
            catch(SQLException e){
                e.printStackTrace();
                return 0;
            }
    }

    public Object getValueAt(int r, int c){ 
            try{
                res.absolute(r+1);
                return res.getObject(c+1);
            }
            catch(SQLException e){
                e.printStackTrace();
                return null;
            }
    }

    public int getRowCount(){ 
            try{
                res.last();
                return res.getRow();
            }
            catch(SQLException e){
                e.printStackTrace();
                return 0;
            }
    }

    public boolean isCellEditable(int r, int c){
            return true;
    }

}
[/syntax]