Pegar ultimo valor do banco jdbc sql

19 respostas Resolvido
java
R

pessoal estou tentando pegar o ultimo valor do banco dessa maneira e mostrar em um joptionpane, mas não está dando certo. segue…

Class.forName(Auxiliar1.AcessoBanco.getDriver());
            Connection con = DriverManager.getConnection(Auxiliar1.AcessoBanco.getUrl(), Auxiliar1.AcessoBanco.getUser(), Auxiliar1.AcessoBanco.getPass());
            String query1 = "Select MAX(ExtA_IndParafuso)FROM L11 ORDER BY ExtA_IndParafuso asc";
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query1);
            JOptionPane.showMessageDialog(null, rs);

19 Respostas

E

E ai

Então, tente assim. (Garanta que o campo ExtA_IndParafuso e a tabela L11 existam antes de tudo)

Select MAX(ExtA_IndParafuso) FROM L11

E no seu JOptionPane

JOptionPane.showMessageDialog(null, rs.getInt(0));

R

Bom dia Edu,tentei da sua forma e não deu certo. Confirmei a existencia da tabela com a coluna e mostrei nas imagens logo a cima.

Coloquei para ele pegar o valor e colocar em um campo, mas ele está pegando esse valor.

Coloquei também para que ele me retornasse o ultimo valor do banco a cada 5 segundos, e ele esta me retornando o valor da imagem acima e somando + 1 a cada 5 segundos… exemplo: 6,7,8,9…

E

No seu jTextField6 você não pode setar o rs.toString.

Você deve pegar ele inteiro (Verifique se esta coluna ExtA_IndParafuso é inteiro) e converter para String.

Ex:

int valor = rs.getInt(0);
jTextField6.setText(String.valueOf(valor));

No seu JOptionPane estava retornando os valores corretos?

Dentro do seu catch, defina:

e.printStackTrace();

Para saber o erro quando acontecer. Passe aqui se cuspir algum erro no console.

R

fiz da maneira q vc disse, mas mesmo assim não trouxe nenhum valor. Respondendo a pergunta se pelo pane trouxe, também não.

try {
                Class.forName(Auxiliar.AcessoBanco.getDriver());
                Connection con = DriverManager.getConnection(Auxiliar.AcessoBanco.getUrl(), Auxiliar.AcessoBanco.getUser(), Auxiliar.AcessoBanco.getPass());
                String query1 = "Select MAX(ID_RESULTADO) FROM Resultado";

                Statement st = con.createStatement();
                ResultSet rs = st.executeQuery(query1);
                rs.getFloat(query1);
                int valor = rs.getInt(0);
                jTextField6.setText(String.valueOf(valor));
            } catch (Exception e) {
                e.printStackTrace();
            }
E

Opa

Tente:

try {
                Class.forName(Auxiliar.AcessoBanco.getDriver());
                Connection con = DriverManager.getConnection(Auxiliar.AcessoBanco.getUrl(), Auxiliar.AcessoBanco.getUser(), Auxiliar.AcessoBanco.getPass());
                String query1 = "Select MAX(ID_RESULTADO) FROM Resultado";
                Statement st = con.createStatement();
                ResultSet rs = st.executeQuery(query1);
                int value = 0;
                while ( rs.next() ){
                     value= rs.getInt(1);
                }
                  jTextField6.setText(String.valueOf(value));
                  JOptionPane.showMessageDialog(null, value); 
            } catch (Exception e) {
                e.printStackTrace();
            }

ou também

try {
                Class.forName(Auxiliar.AcessoBanco.getDriver());
                Connection con = DriverManager.getConnection(Auxiliar.AcessoBanco.getUrl(), Auxiliar.AcessoBanco.getUser(), Auxiliar.AcessoBanco.getPass());
                String query1 = "Select MAX(ID_RESULTADO) as max_value FROM Resultado";
                Statement st = con.createStatement();
                ResultSet rs = st.executeQuery(query1);
                int value = 0;
                while ( rs.next() ){
                     value= rs.getInt("max_value");
                }
                  jTextField6.setText(String.valueOf(value));
                  JOptionPane.showMessageDialog(null, value); 
            } catch (Exception e) {
                e.printStackTrace();
            }

Veja se joga algum erro no console.

Este valor ID_RESULTADO é um inteiro, certo?

R

Edu, eu fiz desse ultimo exemplo seu, mas estou com um grande problema, ele esta trazendo o maior valor independente se é o ultimo ou não. nesse caso meu ultimo valor é 50, mas o valor lançado pela pessoa foi 420… então ele está trazendo 420.

e mais uma duvida eu tentei passar para float e parece q deu certo. Da uma olhada se está certo.

try {
                Class.forName(Auxiliar.AcessoBanco.getDriver());
                Connection con = DriverManager.getConnection(Auxiliar.AcessoBanco.getUrl(), Auxiliar.AcessoBanco.getUser(), Auxiliar.AcessoBanco.getPass());
                String query1 = "Select MAX(ID_RESULTADO) as max_value FROM Resultado";
                Statement st = con.createStatement();
                ResultSet rs = st.executeQuery(query1);
                int value = 0;
                while (rs.next()) {
                    value = (int) rs.getFloat("max_value");
                }
                jTextField6.setText(String.valueOf(value));
                JOptionPane.showMessageDialog(null, value);
            } catch (Exception e) {
                e.printStackTrace();
            }
E

E ai

Quando você usa o MAX ele traz sim o maior valor.

Pra você trazer o último você deve ter uma coluna com a data de inserção e trazer o maior valor baseado nessa coluna de data de inserção.

R

Eu tenho essa coluna q no caso é a minha “E3TimeStamp”

E

Ai seria algo do tipo

SELECT ID_RESULTADO FROM Resultado ORDER BY E3TimeStamp DESC LIMIT 1

Tente isso

R

Select MAX(ExtA_IndParafuso) FROM L11 GROUP BY E3TimeStamp fiz assim e deu certo edu, mas não está retornando em float… vc deu uma olhada da meneira q te mandei logo a cima?

E
Solucao aceita

Você fala de fazer dessa forma?

float value = 0f;
while ( rs.next() ){
    value= rs.getFloat(1);
}
R

Deu certo cara, vc é foda!! valeu pela paciência… muito obrigado mesmo!

R

Tentei colocar um segundo valor nessa mesma consulta mas não deu certo kkk… vou ter q criar uma consulta para cada valor q eu quiser buscar?

E

Você fala

SELECT ID_RESULTADO, OUTRO_CAMPO FROM Resultado ORDER BY E3TimeStamp DESC LIMIT 1

Você pode fazer dessa forma

while ( rs.next() ){

value1= rs.getFloat(ID_RESULTADO);

value2 = rs.getFloat(OUTRO_CAMPO); //se for float, ou getString, getInt,…

}
R

no meu caso estou usando o ‘Select MAX(ExtA_IndRpm) FROM L11 GROUP BY E3TimeStamp’

Então ficaria assim?

“Select MAX(ExtA_IndRpm), MAX(ID_RESULTADO ) FROM L11 GROUP BY E3TimeStamp”

E

Isto. Mas faça assim

Select MAX(ExtA_IndRpm) as valor1, MAX(ID_RESULTADO ) as valor2 FROM L11 GROUP BY E3TimeStamp

Atribui um alias (apelido)

Ai varrendo seu Resultset ficaria:

while ( rs.next() ){
    value1= rs.getFloat("valor1");
    value2 = rs.getFloat("valor2"); //se for float, ou getString, getInt,...
}
R

Perfeito, muito obrigado!

R

Edu, mais uma duvida kkkkkkk, estou te amolando demais. Queria saber se é possível eu trazer esse valor em float com apenas uma casa decimal, pois o sistema pega o valor da máquina e já salva ela com um valor float gigante nesse nível aqui “22.6273632049561”

J

vc tem que configurar o campo que vai receber este valor

Criado 31 de outubro de 2017
Ultima resposta 1 de nov. de 2017
Respostas 19
Participantes 3