Consulta MySQL

12 respostas
A
Olá pessoal, bom dia a todos. Sou novo no forum e me considero iniciante em Java. Tenho uma duvida que para muitos aqui deve ser a coisa mais simples do mundo. Pesquisei na net mas não encontrei uma resposta, pelo menos não uma em que eu entendesse, bom eh o seguinte: Quando eu crio uma consulta em Java Desktop, qual a melhor forma de se obter os dados consultados: 1 - Usando o ResultSet como variavel de instância default e usando o codigo:
if (rs.next()) {
String variavel = rs.getString("Campo do MySQL");
}
ou 2 - usando o return ResultSet como a seguir e não deixando o ResultSet default e nem Public:
double saldo(int num) throws CNEException, SQLException {

    rset = stmt.executeQuery("SELECT * FROM CONTAS WHERE numero=" + num);

    if (rset.next()) return rset.getDouble("saldo");

    else throw new CNEException();

}

Porem quando uso a segunda opção não consigo retornar todos os registros da consulta mas somente um, alguem saberia me dizer po que?

Enão galera qual a forma recomendada??

Abraços a todos

12 Respostas

wagne23

Vc está retornando somente um resultado porque vc não está iterando com um laço de repetição. Eu sempre faço com um while assim:

while(rs.netxt()){ String a = rs.getString("campo da tabela"); }

FacaNaCaveira

Fala ai Agent K.

nesse seu projeto é provavel que vc tenha criado a Classe Contas correto?, a maneira mais tranquila digamos assim e respeitando as regras de OO seria vc passar o codigo como vc ja esta fazendo mas retornando um List, pois se serão varios valores o List seria melhor. Uma observação com relação a sua pergunta é que para vc retornar um resultSet seria caso vc tivesse mais de um valor (registro) para ser retornado, no caso de Saldo não seria apenas um resultado retornado, tipo assim:

double saldo(int num) throws CNEException, SQLException {

    rset = stmt.executeQuery("SELECT SUM(SALDO) 'Saldo' FROM CONTAS WHERE numero=" + num);
    ...
    ...

}

Pelo seu codigo pude observar que vc espera apenas um resultado que seria o Saldo, como esta retornando varios valores acredito que seu problema seja pq pode ter esquecido de colocar um SUM (SALDO) na consulta SQL para poder retornar a soma de todos os saldos onde o campo numero será igual ao valor passado por parametro

Abração 8)
Max

A

Desculpa a demora ai galera, tive que me ausentar por varios dias.
Mas me digam o seguinte, e se eu precisar retornar varios registros na consulta e ainda com uma classe de conexão que retorne o resultSet, como faço pra obter os dados da consulta? Suando o rs.getString eu só consigo acessar um registro do banco, como faço pra acessar todos os registros retornados no return ResultSet??

Grande Abraçossss

S

Olhe a resposta do wagne23 , deve utilizar um while.

A

Pois entuam, como eu disse tenho uma classe de conexão separada da classe de consulta, e tenho tbm a classe da interface grafica, se eu for utilizar o while como citado acima eu teria que deixar o ResultSet como variavel de instancia correto? Mas isso é a melhor forma?? Eu naum teria que deixar meu ResultSet private e acessar ele via método public??
Usando o while(rs.next()) como citado acima consigo normalmente minha duvida é ao deixar o ResultSet private e obter os dados dele via return ResultSet.

Obrigado

S

Posta seu código aí, que facilita para entendermos sua situação.

A

O codigo que eu fiz eh o seguinte:

Classe de consulta:

public class ConsEnv{
	 private ResultSet rs;
	 
	 
	 public ResultSet ConsEnv() throws ParseException, SQLException{
		 Conexao c = new Conexao();
		 c.conectar();
		 Connection con = c.conectar();
		
		 String query = "Select * from envolvidos where env_nome = ?";
		 PreparedStatement pstmt = con.prepareStatement(query);
		 pstmt.setObject(1, "marcos");
		 rs = pstmt.executeQuery();
		 while (rs.next()){
			 return rs;
		 }
			
		return null;		 
	 }

E a classe para retornar os dados consultados pela classe anterior:

public class TesteCons {
	public void TesteCons() throws SQLException, ParseException{
	ConsEnv consEnv = new ConsEnv();
		 System.out.println("Registro Consultado: "+consEnv.ConsEnv().getString("env_id"));
	}
	public static void main(String[] args) throws SQLException, ParseException{
		TesteCons cons = new TesteCons();
		cons.TesteCons();
	}
}

Esse codigo ate faz a consulta mas retorna apenas um regitgro. Qual seria a forma de retornar todos os registros que possuem os dados que se enquadram na consulta "Select".

Galera agradeço ai pelo empenho em me ajudar.

Estou no aguardo.

S
while (rs.next()){  
          return rs;  
}

Return encerra o while e o método, ou seja, a primeira vez que passar ali, você irá retornar o resultset na primeira posição.

Uma opção seria

public ResultSet consEnv() throws ParseException, SQLException{  
      Conexao c = new Conexao();  
      c.conectar();  
      Connection con = c.conectar();  
       
      String query = "Select * from envolvidos where env_nome = ?";  
      PreparedStatement pstmt = con.prepareStatement(query);  
      pstmt.setObject(1, "marcos");  
      rs = pstmt.executeQuery();  
      return rs;
 }

//------------------

     public void TesteCons() throws SQLException, ParseException{  
          ConsEnv consEnv = new ConsEnv();  
          Resultset rs = consEnv.consEnv();
          while(rs.next()) {
              System.out.println("Registro Consultado: "+rs.getString("env_id"));  
          }
     }
A

SergioM Valei kra era isso mesmo que eu precisava.

Muito obrigadooooo pela ajudaaaa…

Abraços ae galera

A

Tenho um problema semelhante que é o seguinte:

  • Fiz um WebService que faz consulta ao banco de dados e ele retorna os dados em um XML, porém ele não retorna todos os dados, ele encontra o primeiro resultado e traz ele duas vezes, veja o código:
public List queryLatitude2() {
		Connection conn = conectar();
		PreparedStatement stmt = null;
		ResultSet rs = null;
        List<Double> lista = new ArrayList<Double>();
		try {
			stmt = conn
					.prepareStatement("SELECT latitude FROM localizacao;");
			rs = stmt.executeQuery();

			while (rs.next()){ // NÃo há latitude a retornar
				Double d;
				d = rs.getDouble("latitude");
				lista.add(d);
			}
		
			return lista;

		} catch (Exception erro) {
			throw new RuntimeException(erro);
		} finally {
			// Fecha o statement, o resultset e a conexão
			if (rs != null)
				try {
					rs.close();
				} catch (Exception e) {
				}
			if (stmt != null)
				try {
					stmt.close();
				} catch (Exception e) {
				}
			try {
				conn.close();
			} catch (Exception e) {
			}
		}
	}
emanuelmm

alexandrebpsjc, seu codigo nao parece ter problema, parece ser uma coisa mais na tabela. Como está o resultado do select?

A

Pois é, tá certo mesmo, retornou a lista. :?

Acho que o tomcat não estava restartando direito.

Valeu.

Criado 3 de agosto de 2010
Ultima resposta 16 de abr. de 2012
Respostas 12
Participantes 6