Olá amigos do GUJ.
Eu comecei a me aventurar na codificação Java a bem pouco e tempo, e como todo iniciante, dúvidas me afligem.
Eu estou tentando desenvolver um programinha desktop, para ser utilizado na empresa onde eu trabalho, afim de “automatizar” um pouco os processos ( entenda: parar de usar planilha do excel ).
Esse aplicativo, precisa buscar uma certa informação do banco de dados, e retornar esses valores em uma JTable.
Incialmente eu consegui fazer esse processo, usando o DefultTableModel, mas estou tentando migrar para uma TableModel personalizada.
Minha dificuldade neste caso, é que eu não consigo mais passar o resultado da consulta sql ao JTable.
class MyTableModel extends AbstractTableModel
{
private String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
private Object[][] data =
{
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
public int getColumnCount()
{
return columnNames.length;
}
public int getRowCount()
{
return data.length;
}
public String getColumnName(int col)
{
return columnNames[col];
}
public Object getValueAt(int row, int col)
{
return data[row][col];
}
public Class getColumnClass(int c)
{
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col)
{
if (col < 2)
{
return false;
}
else
{
return true;
}
}
public void setValueAt(Object value, int row, int col)
{
if (DEBUG)
{
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}
data[row][col] = value;
fireTableCellUpdated(row, col);
if (DEBUG)
{
System.out.println("New value of data:");
printDebugData();
}
}
Eu estou usando aqui como exemplo, a TableModel do tutorial da Oracle.
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
A conexão com o banco é feita nesta parte:
Connection con = null;
Statement st = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@127.0.0.1:1521"; // endereço do banco
String db = "banco"; // nome do banco
String driver = "oracle.jdbc.driver.OracleDriver"; // driver usado
String user = "user"; // usurário
String pass = "senha"; // senha
JTable table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
try
{
Class.forName(driver);
con = DriverManager.getConnection(url + db, user, pass);
con.setAutoCommit(false);// Disables auto-commit.
st = con.createStatement();
// select passada ao banco
String sql = "select s.seqsetor,p.seqquestao,s.seqsetor||'.'||p.seqquestao seq, " +
"p.questao, p.pont_max, " +
"p.processo, p.subprocesso, p.balizador from map_dadosri p, " +
"map_setorri s where p.tipo_ri = s.tipo_ri " +
"and p.seqsetor = s.seqsetor order by 1,2";
rs = st.executeQuery(sql);
ArrayList<Object> listaLinhas = new ArrayList<>();
while ( rs.next() )
{
ArrayList<Object> linha= new ArrayList<>();
linha.add(rs.getString("seqsetor"));
linha.add(rs.getString("seqquestao"));
linha.add(rs.getString("seq"));
linha.add(rs.getString("questao"));
linha.add(rs.getString("pont_max"));
linha.add(rs.getString("processo"));
linha.add(rs.getString("subprocesso"));
linha.add(rs.getString("balizador"));
listaLinhas.add(linha.toArray());
}// fim do while
Object[] data = listaLinhas.toArray();
// fim procedimento para obter os dados
}
catch(SQLException ex)
{
JOptionPane.showMessageDialog(null, "SQLException: " + ex.getMessage());
JOptionPane.showMessageDialog(null, "SQLState: " + ex.getSQLState());
JOptionPane.showMessageDialog(null, "VendorError: " + ex.getErrorCode());
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"Problemas ao tentar conectar com o banco de dados");
}// fim Desenv
Como eu faço para pegar o nome nome das colunas no lugar de columnName e as informações da consulta no lugar de data?
Obrigado antecipadamente.