Como pegar o resultado de uma Query (Sub-Query) em Java [RESOLVIDO]

6 respostas
javamysql
M

Pessoal, pesquisei muito e não achei nada que eu conseguir entender.

Estou fazendo uma Query com uma SubQuery e gostaria de pegar o resultado disso e preencher um ComboBox.

No código abaixo eu consegui preencher o ComboBox porém ele não foi preenchido com o resultado da query e quando eu testo essa mesma query no banco ela funciona, por isso eu acho que deve ser alguma coisa no Java e eu suspeito que seja no resultSet.

Segue o código:

public void popularComboxInicio () throws Exception
	{	
		final String SQL = "(SELECT horario.horarioInicio FROM horario WHERE NOT EXISTS(SELECT agenda_reuniao.horaInicio FROM agenda_reuniao "
				+ "WHERE agenda_reuniao.sala = ? AND agenda_reuniao.dataMesAno = ? AND horario.horarioInicio BETWEEN agenda_reuniao.horaInicio AND agenda_reuniao.horaFinal))";
			
		try 
		{
			
			//FAZER ALGORITMO QUE VERIFICA SE EXISTE UM CONTATO SELECIONADO
			Reuniao reuniao = null;
			reuniao = new Reuniao();
			
			//1ª - Abrir a conexao
			ConexaoMySQL.abrir();
		
			//PreparedStatment - Classe responsável por aplicar valores na SQL (trocar ?
			//por valor) e executar sqls
			PreparedStatement stmt = ConexaoMySQL.getConexao().prepareStatement(SQL);
			
			//Aplicando os valores nos '?'
			stmt.setString(1, reuniao.getSala());
			stmt.setString(2, reuniao.getDataMesAno());
			
			//Executando o Script
			ResultSet resultSet = stmt.executeQuery();
			
                        //Remove tudo de dentro do ComboBox
			cbHoraInicio.removeAllItems();
			
                        //preenchendo o ComboBox 
                        while (resultSet.next()) 
			{
			    cbHoraInicio.addItem(resultSet.getString("horarioInicio"));
			}
			
		} 
		catch (Exception e) 
		{
			//2ª - Jogar a exceção para cima com throw
			throw e;
		}
		finally
		{
			//3ª - Fechar a conexao
			//Este comando fica no finally porque a conexao deve ser encerrada
			//tanto se der erro quanto não der
			ConexaoMySQL.fechar();
		}
	}

Agradeço desde já.

6 Respostas

4

faça um while com System.out.println() e me diga o que trouxe de resultado, também coloque no catch um system.out.print para ve se n gerou nenhum erro:

catch (Exception e) 
{
    	System.out.println(e.getMessage());
	throw e;
}

faça os testes e de um feedback.

M

Não gera nenhum erro…

Assim na tabela horario eu tenho horarioInicio e na tabela agenda_reuniao eu tenho horainicio , quero que ele retorna todos os horarios que não tenha reunião marcada e essa query retorna exatamente isso quando executado direto do banco, porem quando eu executo junto com o programa ele retorna todos os valores.
Exemplo:
Na Sala A , Data: 20-10-2016
retorna
7:00
7:30
8:00
8:30
até 20:30

sendo que no banco ele retorna apenas
19:30
20:00
pois eu tenho reuniões marcadas(Inseri para efetuar o teste)

M

Acho que o erro está aqui, pois eu estou passando a coluna da tabela , talvez por isso esteja gravando todos os valores e não os retornados da query.

Porem eu não sei como arrumar

4

Seguinte, vc cria uma nova reunião, assim essa reunião n possui valor dentro. Ae vc coloca um .setString() com a reunião vazia. Esta ae seu problema, pois quando ele chega nessas linhas…

stmt.setString(1, reuniao.getSala());
stmt.setString(2, reuniao.getDataMesAno());

A Reunião esta vazia pois vc deu um new.

4

Vc também pode alterar para:

while (resultSet.next()) 
{
    cbHoraInicio.addItem(resultSet.getString(1));
}
M

Poxa cara, você está totalmente certo.

Eu não percebi que poderia ter sido isso, uma coisa muito boba…

Te agradeço, muito obrigado…

Criado 19 de outubro de 2016
Ultima resposta 19 de out. de 2016
Respostas 6
Participantes 2