Preciso fazer uma tela de classificação. Ele sera classicado por uma soma, mas os dados do abnco já estao sendo armazenados na tabela corretamente. O problema é que eu preciso que na primeira coluna da jtable, a cada nova inserção de linha, ele gere uma ordem, tipo essa:
Quero saber como fazer essa coluna de ordem no codigo, para cada linha adicionada, ele vá gerando essa variavel que se auto incrementa.Essa tela da imagem, esta com dados ficticios, só falta a primeira coluna. Poderiam me ajudar??? Preciso urgente de uma solucao
Qual banco de dados está usando?
Exemplo em MySql:
SET @ordem = 0;
SELECT (@ordem := @ordem + 1) as ordem, t.*
FROM tabela t
ORDER BY t.pontuacao DESC
Estou usando o mysql mesmo.
A parte que voce explicou para fazer no banco de dados eu entendi. Mas como eu faria para mostrar essa ordem na minha tela??
Como setar essa ordem no java?
É só voce executar o SQL acima que a coluna ordem já vem pronta, da mesma forma que o restante dos campos que você já mostra.
E como eu adicionaria esse campo na tabela?? Teria criar uma variavel para setar nela, ou de outra forma?
Poderia me dar um exemplo?
Fiz um teste no mysql e a coluna ordem fica vazia
Queria saber como colocar essa coluna ordem na coluna da jtable
Posta um print da query sendo execudada no MySql. Informe a versão do MySql também.
Continuei testando e agora deu certo no mysql.
Porem ainda continuo com a duvida de acrescentar essa coluna “ordem” na minha jtable
Como você colocou as outras colunas vindas do banco, como Matricula por exemplo? É só fazer o mesmo, é só mais uma coluna que vai vir na query.
public ArrayList<Estudante> Classificacao() {
Connection conexao = Conexao.getConexao();
PreparedStatement stmt = null;
ResultSet rs = null;
ArrayList<Estudante> estudantes = new ArrayList<>();
try {
stmt = conexao.prepareStatement("SET @ordem = 0;" +
“SELECT (@ordem := @ordem + 1) as ordem, e.id_matricula, e.nome_estudante, e.curso, e.soma” +
“FROM estudante e” +
“ORDER BY e.soma DESC;”);
rs = stmt.executeQuery();
while (rs.next()) {
Estudante estudante = new Estudante();
estudante.setOrdem(rs.getInt("ordem"));
estudante.setIdMatricula(rs.getLong("id_matricula"));
estudante.setNome(rs.getString("nome_estudante"));
estudante.setCurso(rs.getString("curso"));
estudante.setSoma(rs.getInt("soma"));
estudantes.add(estudante);
}
} catch (SQLException ex) {
Logger.getLogger(EstudanteDAO.class.getName()).log(Level.SEVERE, null, ex);
} finally {
}
return estudantes;
}
Esse foi o codigo do dao. coloquei a coluna ordem, porem ele dá um erro ao carregar a jtable
public void classificacaoJtable() throws Exception{
DefaultTableModel modelo = (DefaultTableModel) jtClassificacao.getModel();
modelo.setNumRows(0);
ControleClassificacao controle = new ControleClassificacao();
for(Estudante est: controle.classificacao()){
modelo.addRow(new Object[]{est.getOrdem(), est.getNome(), est.getIdMatricula(),est.getCurso(), est.getSoma()});
}
}
Esse foi o codigo para implementar a jtable
Quando voce debuga rs.getInt(“ordem”) vem o valor correto?
nov 27, 2017 5:01:06 PM persistencia.ClassificacaoDAO Classificacao
GRAVE: null
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘SELECT (@ordem := @ordem + 1) as ordem, e.id_matricula, e.nome_estudante, e.curs’ at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322)
at persistencia.ClassificacaoDAO.Classificacao(ClassificacaoDAO.java:70)
at controle.ControleClassificacao.classificacao(ControleClassificacao.java:20)
at visao.Classificacao.classificacaoJtable(Classificacao.java:38)
at visao.Classificacao.(Classificacao.java:30)
at visao.TelaInicial.jButton4ActionPerformed(TelaInicial.java:289)
at visao.TelaInicial.access$200(TelaInicial.java:18)
at visao.TelaInicial$3.actionPerformed(TelaInicial.java:95)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Quando executo no debug ele dá o seguinte erro, e nao vem o valor
Tenta dessa forma pra ver se funciona no Java:
SELECT
@ordem := @ordem + 1 AS ordem,
t.*
FROM tabela t,
(SELECT @ordem := 0) o
Precisa ter uma variavel no modelo que receba esses valores da ordem?
Isso ai já é outro assunto. Na minha opiniao o importante é ter uma classe ou estrutura de dados que simplesmente represente o resultado dessa consulta, sem misturar com outras responsabilidades.
Não seria “Estudante” (que representa só os dados cadastrais do aluno) e sim o nome específico para o relatório, por exemplo “ClassificacaoEstudante”.