Problemas com tabela modelo

Alguem sabe me dizer onde esta o erro…
eh o seguinte…essa eh uma tabela modelo…apartir dela eh criada outra com os resultandos que ela deve retornar…

[code]
public class TableModelo extends JTable {

private Object[] col;

private Object[][] lin;
Connection conn=null;

/**
 * Construtor Padrão
 */
public TableModelo() {
	Conexao();
}
public void Conexao () { 
String dbdriver = "org.postgresql.Driver"; 
String url = "jdbc:postgresql://200.215.114.175/servicos"; 
String dbuser = "msitec"; 
String dbpass = "ms340101"; 

try{
	Class.forName(dbdriver); 
	conn=DriverManager.getConnection(url,dbuser,dbpass);
	System.out.println("Banco conectado pelo gerenciador"); 
	}catch (Exception e) 
	{ 
	System.out.println("Banco não conectado !!"); 
	}	 
} 

/**
 * Construtor que se conecta ao Banco de Dados e mostra uma pesquisa
 * @param c Conexão que será usada para se conectar ao Banco de Dados
 * @param tabelas tabelas que serão consultadas
 * @param campos campos que serão mostrados na table
 * @param criterios critérios da pesquisa
 * @see java.sql
 */
public TableModelo(String tabelas,String campos,String criterios) {

    lin = retornarLinhas(tabelas, campos, criterios);
    col = retornarColunas(tabelas, campos, criterios);

    createModel();

    super.setVisible(true);
}

/**
 * Retorna o nome das colunas
 * @param c uma conexao com o banco de dados
 * @param tabelas tabelas que serão pesquisadas
 * @param campos campos que serão retornados
 * @param criterios parâmetros da cláusula WHERE, ex.: "COD = 001"
 * @return obj[] Nome das colunas
 * @see java.sql.ResultSet
 */

private Object[] retornarColunas(String tabelas,
        String campos, String criterios) {
    
    String query = "SELECT " + campos + " FROM " + tabelas;
    if (criterios.length() > 0) query = query + " WHERE " + criterios;
    System.out.println(query);
    Statement s;
    ResultSet rs;
    ResultSetMetaData rsmd;
    Object obj[] = null;

    try {
        s =conn.createStatement(); 
        s.executeQuery(query);
        rs = s.getResultSet();

        rsmd = rs.getMetaData();

        obj = new Object[rsmd.getColumnCount()];
        for (int i = 1; i <= obj.length; i++) {
            obj[i - 1] = rsmd.getColumnName(i);
        }
    } catch (Exception ex) {
        System.out.println("RetornarColunas: " + ex);
    }

    return (obj);
}

/**
 * Retorna toda a pesquisa
 * @param c uma conexao com o banco de dados
 * @param tabelas tabelas que serão pesquisadas
 * @param campos campos que serão retornados
 * @param criterios parâmetros da cláusula WHERE, ex.: "COD = 001"
 * @return obj[][] conteúdo das pesquisas
 * @see java.sql.ResultSet
 */

private Object[][] retornarLinhas(String tabelas,
        String campos, String criterios) {
    String query = "SELECT " + campos + " FROM " + tabelas;
    if (criterios.length() > 0) query = query + " WHERE " + criterios;
    Statement s;
    ResultSet rs;
    ResultSetMetaData rsmd;
    Object obj[][] = null;

    try {
        s =conn.createStatement();
        s.executeQuery(query);
        rs = s.getResultSet();

        rsmd = rs.getMetaData();
        int totalLinhas = retornarCount(query);
        if (totalLinhas <= 0) {
            obj = new Object[1][1];
            obj[0][0] = "ERRO: Nenhuma linha afetada";
            return (obj);
        }
        obj = new Object[totalLinhas][rsmd.getColumnCount()];

        int i = 0;
        while (rs.next()) {
            Object obj2[] = new Object[rsmd.getColumnCount()];
            for (int j = 1; j <= rsmd.getColumnCount(); j++) {
                obj2[j - 1] = rs.getString(j);
            }
            obj[i] = obj2;
            i++;
        }
    }

    catch (Exception ex) {
        System.out.println("RetornarLinhas: " + ex);
        obj = new Object[1][1];
        obj[0][0] = "ERRO: " + ex;
        return (obj);
    }

    return (obj);
}

/**
 * Conta a quantidade de linhas retornadas da pesquisa
 * @param c uma conexao com o banco de dados
 * @param query instrução sql
 * @return quant quantidade de linhas
 * @see java.sql.ResultSet
 */

private int retornarCount(String query) {
    Statement s;
    ResultSet rs;

    int quant = 0;
    try {
        s = conn.createStatement();
        s.executeQuery(query);
        rs = s.getResultSet();
        while (rs.next()) {
            quant++;
        }
    } catch (Exception ex) {
        System.out.println("RetornarCount: " + ex);
        return (0);
    }

    return (quant);
}

/**
 * Insere linhas na Tabela
 * @param quant quantidade de linhas que serão adicionadas
 */

public void insertRows(int quant) {
    Object[][] obj = lin;

    lin = new Object[obj.length + quant][col.length];

    for (int i = 0; i < lin.length; i++) {
        if (i < obj.length) {
            lin[i] = obj[i];
        } else {
            for (int j = 0; j < lin[i].length; j++) {
                lin[i][j] = "";
            }
        }
    }

    createModel();

    super.setVisible(true);
}

/**
 * Deleta linha(s) selecionada(s)
 */

public void deleteRow() {
    int[] row = super.getSelectedRows();

    for (int i = (row.length - 1); i >= 0; i--) {
        deleteRow(row[i]);
    }

    createModel();

    super.setVisible(true);
}

private void deleteRow(int row) {
    Object[][] o = lin;
    lin = new Object[o.length - 1][col.length];
    int j = 0;

    for (int i = 0; i < o.length; i++) {
        if ((i != row)) {
            lin[j] = o[i];
            j++;
        }
    }
}

private void createModel() {
    int[] colW = new int[super.getColumnCount()];

    for (int i = 0; i < colW.length; i++) {
        colW[i] = super.getColumn(super.getColumnName(i)).getWidth();
    }

    TableModel tableModel = new AbstractTableModel() {

        public int getColumnCount() {
            return col.length;
        }

        public int getRowCount() {
            return lin.length;
        }

        public Object getValueAt(int row, int col) {
            return lin[row][col];
        }

        public String getColumnName(int column) {
            return ("" + col[column]);
        }

        public boolean isCellEditable(int row, int col) {
            return (false);
        }

        public void setValueAt(Object aValue, int row, int column) {
            lin[row][column] = aValue;
        }
    };

    super.setModel(tableModel);

    for (int i = 0; i < colW.length; i++) {
        super.getColumn(super.getColumnName(i)).setPreferredWidth(colW[i]);
    }
}

}
[cod]
mas o problema eh que ele esta retornando colunas e linhas null…se alguem ver o erro ou tiver um modelo que faca isso que eu quero, por favor poderia me comunicar…

obrigada…
ah, antes de mais nada…ja verifiquei o nome da tabela, o nome do banco, o driver, estah tudo ok…

Você precisa se conectar ao banco antes de pegar as linhas e as colunas de qualquer consulta.