Pessoal,
Estou apanhando um pouco em um projeto, que seria um exportador de consultas sql. basicamente o usuário configura qual bando de dados ele quer se conectar e em um jText ele escreve a consulta sql para ser exportado isso para excel.
bom…até ai funciona o “problema” é que gostaria de exibir esses dados em um JTable por exemplo antes de exportar até pra saber se era isso mesmo que esse car precisa.
Bom até onde eu sei para fazer isso, é preciso setar essas informações trazidas do banco para um classe e depois dar um get para preencher a jtable.
o grande lance é que não sei quantas colunas virão dessa consulta e tbm não sei qual banco ele vai consultar, pode ter 2 3 5 20 colunas e informações diferentes, então, não consigo definir uma classes para setar essas informações,pois não sei quais delas virão do banco. enfim…
Só gostaria de saber se existe a possibilidade de criar um classes que vai receber todas esses informações independente do banco, ou se é possivel apenas listar de alguma forma sem precisar setar essas informações em uma classe.
Fácil. Ao fazer a consulta você pode pegar do seu ResultSet um objeto do tipo ResultSetMetaData. Com os metadados você consegue configurar a quantidade e o nome das colunas da sua JTable. Para fazer o model, é só montar uma List de Map’s, com cada Map representando uma linha do resultado, daí você escreve um TableModel para ler os dados da List de Maps.
@rmendes08, super facil…rsrs para um ninja do Java.
Será que consigo achar algo similar em buscas no google devo procurar como? ou se você puder me mostrar como funcionaria isso.
Hoje a minha consulta está desa forma, já tenho o ResultSetMetaData que usar para contar as colunas para montar o excel. Não sei se ajuda já.
[code]public int exeQuery(String qry) throws IOException {
int result = 0;
StringBuffer contenu;
contenu = new StringBuffer("");
try {
st = conn.createStatement();
ResultSet rs = st.executeQuery(qry);
ResultSetMetaData rsMeta = rs.getMetaData();
while (rs.next()) {
for (int i = 1; i<= rsMeta.getColumnCount();i++) {
contenu.append(rs.getString(i)+"\t");
}
contenu.append("\n");
}
FileWriter excelFile = new FileWriter("Relatorio.xls");
excelFile.write(new String(contenu));
JOptionPane.showMessageDialog(null,"Relatório salvo!");
excelFile.close();
st.close();
}
catch(SQLException sqlex) {
mensagemErro(sqlex.getMessage());
}
return result;
}[/code]
Essa consulta acima não traz o nome da coluna, como edito esse código para trazer também o nome da coluna com o
seria
getColumnName(int column)
né?
kra faz assim… cria um array com o tamanho igual ao número de colunas e pega o nome das colunas
isso será o cabeçalho… separa ele do conteudo
coloca esse cabeçalho ja no arquivo ( lembre-se que no arquivo vc escreve linha a linha e não coluna a coluna)
assim vc vai ter a quantidade de colunas, o cabeçalho ja vai ta colocado… é só mudar de linha no arquivo sempre que o numero de colunas é atingido dentro do rs.next