Pegar resultado único de uma consulta com ResultSet

Bom dia…
Estou criando um sistema pra registro de ponto dos colaboradores do lugar onde trabalho.
Armazeno em uma tabela os registros feitos e no momento do último registro do dia, eu rodo uma função que calcula os saldos dos registros do dia.

  • Seleciona todos os registros de uma Pessoa.
  • Calcula o tempo de Expediente e de Café.
  • Finalmente insere na tabela de saldo os totais de saldo do dia.

Entre o primeiro e o segundo passo, rodo o SELECT ABAIXO(Considere as datas e ID, para facilitar o entendimento):

SELECT TIMESTAMPDIFF
(SECOND,
(SELECT r.data_hora
FROM registro AS r
WHERE r.data_hora BETWEEN ‘2019-11-26 00:00:00’ AND ‘2019-11-26 23:59:59’
AND r.id_oper = 1
AND r.id_colab = 1),
(SELECT r.data_hora
FROM registro AS r
WHERE r.data_hora BETWEEN ‘2019-11-26 00:00:00’ AND ‘2019-11-26 23:59:59’
AND r.id_oper = 2
AND r.id_colab = 1)
);

Quando faço consultas de vários registros, utilizo a lista e atribuo os valores por nome de coluna com o resultSet. Mas no caso do Select acima, eu recebo um retorno de resultado e não o valor de uma coluna.
E neste caso, não sei como atribuir esse valor a uma variável.
A nível de curiosidade, na classe Saldo, criei um atributo do tipo Float ‘result_dif’ e seus respectivos get e set.
Abaixo o Método que estava fazendo para pegar esse valor:

public List diferencaSaldo(int opeFim,int opeIni, int colab) {
String dia = Util.pegaData(“dd”);
List lSaldo = new ArrayList<>();

	String sql = "SELECT TIMESTAMPDIFF(SECOND, "
			+		"(SELECT r.data_hora "
			+ 		 "FROM registro AS r "
			+		 "WHERE r.data_hora BETWEEN '2019-11-"+ dia +" 00:00:00' "
			+			" AND '2019-11-"+ dia +" 23:59:59' " 
			+			" AND r.id_oper = " + opeIni
			+			" AND r.id_colab = " + colab + "),"
			+		" (SELECT r.data_hora "
			+ 		 " FROM registro AS r"
			+			" WHERE r.data_hora BETWEEN '2019-11-"+ dia +" 00:00:00' "
			+			" AND '2019-11-"+ dia +" 23:59:59'"
			+			" AND r.id_oper = "+ opeFim
			+			" AND r.id_colab = " + colab + "));";
	System.out.println(sql);
	
	try {
		ResultSet result;
		PreparedStatement p = con.getConnection().prepareStatement(sql);
		System.out.println(p);
		result = p.executeQuery();
		
		while(result.next()) {
			Saldo saldo = new Saldo();
			
			saldo.setResultDif(result.???     );  //ESTOU AGARRADO AQUI!
			
			lSaldo.add(saldo);
			
			System.out.println(lSaldo);
		}
		p.close();
		System.out.println("Sucesso, Malucão!");
	} catch (Exception e) {
		System.out.println(e);
	}
	return lSaldo;
}

Já tentou atribuir um alias na consulta e pegar o retorno pelo alias?

Exemplo:

SELECT TIMESTAMPDIFF( ... ) AS DIFERENCA

saldo.setResultDif(result.getInt("DIFERENCA"));

Ou

saldo.setResultDif(result.getInt(1));

Tentei das duas maneiras sim e não tive sucesso também.

Cara. Acabei de descobrir que estava colocando o ALIAS no lugar errado, tem que ser após a função TIMESTAMPDIFF().

Depois que falou, fui tentar de novo e deu certo…

Valeu pela ajuda!

Exatamente, teria que ficar da forma como coloquei no exemplo, caso contrário o alias ficaria internamente na função e não teria como ser referenciada externamente.