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()){Stringvariavel=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?
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:
doublesaldo(intnum)throwsCNEException,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
Agent_K
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
sergiom
Olhe a resposta do wagne23 , deve utilizar um while.
A
Agent_K
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
sergiom
Posta seu código aí, que facilita para entendermos sua situação.
A
Agent_K
O codigo que eu fiz eh o seguinte:
Classe de consulta:
publicclassConsEnv{privateResultSetrs;publicResultSetConsEnv()throwsParseException,SQLException{Conexaoc=newConexao();c.conectar();Connectioncon=c.conectar();Stringquery="Select * from envolvidos where env_nome = ?";PreparedStatementpstmt=con.prepareStatement(query);pstmt.setObject(1,"marcos");rs=pstmt.executeQuery();while(rs.next()){returnrs;}returnnull;}
E a classe para retornar os dados consultados pela classe anterior:
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
sergiom
while(rs.next()){returnrs;
}
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
publicResultSetconsEnv()throwsParseException,SQLException{Conexaoc=newConexao();c.conectar();Connectioncon=c.conectar();Stringquery="Select * from envolvidos where env_nome = ?";PreparedStatementpstmt=con.prepareStatement(query);pstmt.setObject(1,"marcos");rs=pstmt.executeQuery();returnrs;}//------------------publicvoidTesteCons()throwsSQLException,ParseException{ConsEnvconsEnv=newConsEnv();Resultsetrs=consEnv.consEnv();while(rs.next()){System.out.println("Registro Consultado: "+rs.getString("env_id"));}}
A
Agent_K
SergioM Valei kra era isso mesmo que eu precisava.
Muito obrigadooooo pela ajudaaaa…
Abraços ae galera
A
alexandrebpsjc
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:
publicListqueryLatitude2(){
Connectionconn=conectar();PreparedStatementstmt=null;ResultSetrs=null;List<Double>lista=newArrayList<Double>();try{
stmt=conn.prepareStatement("SELECT latitude FROM localizacao;");rs=stmt.executeQuery();while(rs.next()){//NÃohálatitudearetornarDoubled;d=rs.getDouble("latitude");lista.add(d);}
returnlista;}catch(Exceptionerro){
thrownewRuntimeException(erro);}finally{
//Fechaostatement,oresultseteaconexãoif(rs!=null)try{
rs.close();}catch(Exceptione){
}
if(stmt!=null)try{
stmt.close();}catch(Exceptione){
}
try{
conn.close();}catch(Exceptione){
}
}
}
emanuelmm
alexandrebpsjc, seu codigo nao parece ter problema, parece ser uma coisa mais na tabela. Como está o resultado do select?