Utlizar duas consulta sql na mesma clase

[size=24]Por getileza, Algem poderia me ajudar[/size]

Criei um função que conecta com o mysql e fazer a consulta retornando um tipo ResultSet, mas se tento utilizar essa função na mesma classe erra o erro

“[color=red]java.sql.SQLException: Before start of result set”[/color][size=18] [/size]

algem tem alguma solução
Grato

E como este código está? Ou você pensa que somos adivinhos?

Função para retornar os registro do banco:

[code]public ResultSet conectar( String sql) {
Connection conn = null;
ResultSet rs = null;
try {
Class.forName(STR_DRIVER);
} catch (ClassNotFoundException ex) {
Logger.getLogger(conectarmysql.class.getName()).log(Level.SEVERE, null, ex);
}
try {
conn = (Connection) DriverManager.getConnection(STR_CON + “?user=” + USER + “&password=” + PASSWORD);
} catch (SQLException ex) {
Logger.getLogger(conectarmysql.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(“A conexão foi um sucesso\n”);
Statement stm = null;
try {
stm = conn.createStatement();
} catch (SQLException ex) {
Logger.getLogger(conectarmysql.class.getName()).log(Level.SEVERE, null, ex);
}

    try {
        rs = stm.executeQuery(sql);
        
        
    } catch (SQLException ex) {
        Logger.getLogger(conectarmysql.class.getName()).log(Level.SEVERE, null, ex);
    }
       System.out.println("\n\nConsulta realizada com sucesso!!!\n");
   
       
       return (rs);

   
    }[/code]

chamando função:

 
rs = conexao.conectar(sql);

Camarada, não somos cegos, então, por que mudar a fonte para uma tão grande?
Segundo, quando colocar código, faça uso da tag [code]

Agora esta de acordo com oque o site pede

Camarada, de onde tirou essa coisa horrível?
Não sei o que pretende fazer, mas, jamais faça isso.
Primeiro, não use Statement, ele é suscetível a SQL Injection, é inseguro e ultrapassado. Prefira PreparedStatement.
Segundo, não retorne um ResultSet, você precisa tratar os dados enquanto ele está aberto e, isso deve ser feito na camada onde a conexão com o banco é realizada. Ou seja, na mesma classe em que você está trabalhando.

Como seria o melhor maneira de execultar um comando sql e pegar os registro que retorna?

Tentai procar o PreparedStatement mas nã consegui

conexao.java

[code]public Connection abrirconexao(){
try {
Class.forName(STR_DRIVER);
} catch (ClassNotFoundException ex) {
Logger.getLogger(conectarmysql.class.getName()).log(Level.SEVERE, null, ex);
}

    try {
        conn = (Connection) DriverManager.getConnection(STR_CON + "?user=" + USER + "&password=" + PASSWORD);
    } catch (SQLException ex) {
        Logger.getLogger(conectarmysql.class.getName()).log(Level.SEVERE, null, ex);
    }
        return (conn);
    }
    public void fecharconexao(){
    try {
      if(conn.isClosed()){
      System.out.println("conexao aberta");
      }
      else{ 
          System.out.println("conexao fechada");
        conn.close();
      }
    } catch (SQLException ex) {
        Logger.getLogger(conectarmysql.class.getName()).log(Level.SEVERE, null, ex);
    }
    
    }[/code]

gerarxml.java

[code]import abcz.conectarmysql;
import java.io.File;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Element;

/**
*

  • @author Not4
    */
    public class cdcpastoxml {

    public void gerarlmx() throws IOException, SQLException, TransformerConfigurationException, TransformerException {

      try {
    
         ArrayList<String> touro = new ArrayList();
         ArrayList<String> raca = new ArrayList();
         ArrayList<String> graudesangue = new ArrayList();
         ArrayList<String> Sigla = new ArrayList();
         ArrayList<String> Manejo = new ArrayList();
         ArrayList<String> RGD = new ArrayList();
         ArrayList<Integer> quanttouro = new ArrayList();
         conectarmysql conexion = new conectarmysql();
         PreparedStatement pres;
         ResultSet  rs;
        String sql = ("select s.nome, COUNT(*) as quanttouro,s.Raca,s.graudesangue,s.Sigla,s.Manejo,s.RGD "
                 + "FROM animais a "
                 + "			LEFT JOIN reprodutivo_aspiracao_animais raa ON a.Codigo = raa.Coddoadora "
                 + "			LEFT JOIN animais s ON s.Nome = raa.Touro "
                 + "			LEFT JOIN protanimais prota ON raa.Coddoadora = prota.CodAnimal AND prota.CodProt=raa.Numprotocolo "
                 + "		WHERE (raa.Tipo=\"MN\") AND raa.Codigo IN ( "
                 + "			SELECT abczcdcpasto.cod_protocolo "
                 + "			FROM abczcdcpasto) "
                 + "			GROUP by s.Nome "
                 + "			ORDER BY s.Nome ");
          pres= conexion.abrirconexao().clientPrepareStatement(sql);
            
       
         rs = pres.executeQuery();
        
        while (rs.next()) {
             touro.add(rs.getString("s.nome"));
             raca.add(rs.getString("s.raca"));
             graudesangue.add(rs.getString("s.graudesangue"));
             Sigla.add(rs.getString("s.Sigla"));
             Manejo.add(rs.getString("s.Manejo"));
             RGD.add(rs.getString("s.RGD"));
             quanttouro.add(rs.getInt("quanttouro"));
         }
        System.out.println("touro");
        rs.close();
        pres.close();
         int cdc = 0;
         int cont = 0;
         while (touro.size() > cont) {
    
             int quantdadetouro = 0;
             do {
                 System.out.println(quantdadetouro);
                 cdc++;
                 
                sql = ("SELECT DATE_FORMAT(raa.DataDose1,'%m') AS mes, prota.Codigo, raa.Codigo,s.Aptidao,s.Sigla,s.manejo,s.Raca,s.RGD,raa.touro,"
                         + "a.Raca,a.Aptidao,a.RGD,a.Nome,a.Sigla,a.Manejo,raa.Protocolo "
                         + "FROM animais a "
                         + "LEFT JOIN reprodutivo_aspiracao_animais raa ON a.Codigo = raa.Coddoadora "
                         + "LEFT JOIN animais s ON s.Nome = raa.Touro "
                         + "LEFT JOIN protanimais prota ON raa.Coddoadora = prota.CodAnimal AND prota.CodProt=raa.Numprotocolo "
                         + "WHERE (raa.Tipo=\"MN\") AND raa.Codigo IN ( "
                         + "SELECT abczcdcpasto.cod_protocolo "
                         + "FROM abczcdcpasto) "
                         + "ORDER BY s.Nome "
                         + "limit " + String.valueOf(quantdadetouro + "," + quantdadetouro + 3));
                pres= conexion.abrirconexao().clientPrepareStatement(sql);
                rs = pres.executeQuery();
    
                 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
                 DocumentBuilder docBuilder;
                
                     docBuilder = docFactory.newDocumentBuilder();
                
                 org.w3c.dom.Document doc = docBuilder.newDocument();
    
                 Element rootElement = doc.createElement("documento");
                 doc.appendChild(rootElement);
    
                 Element numero = doc.createElement("numero");
                 numero.appendChild(doc.createTextNode(String.valueOf(cdc)));
                 rootElement.appendChild(numero);
    
                 Element tipo = doc.createElement("tipo");
                 tipo.appendChild(doc.createTextNode("CDCMN"));
                 rootElement.appendChild(tipo);
                 
                 Element ano = doc.createElement("ano");
                 ano.appendChild(doc.createTextNode(""));
                 rootElement.appendChild(ano);
                 
                 Element mes = doc.createElement("mes");
                 mes.appendChild(doc.createTextNode( rs.getString("mes")));
                 rootElement.appendChild(mes);
                 
                 Element dia = doc.createElement("dia");
                 dia.appendChild(doc.createTextNode("CDCMN"));
                 rootElement.appendChild(dia);
    
                 // staff elements
                 Element staff = doc.createElement("teste");
                 rootElement.appendChild(staff);
    
    
                 Element firstname = doc.createElement("numero");
                 firstname.appendChild(doc.createTextNode("1"));
                 staff.appendChild(firstname);
    
                 // lastname elements
                 Element lastname = doc.createElement("tipo");
                 lastname.appendChild(doc.createTextNode("CDCIA"));
                 staff.appendChild(lastname);
    
                 // nickname elements
                 Element nickname = doc.createElement("mes");
                 nickname.appendChild(doc.createTextNode("02"));
                 staff.appendChild(nickname);
    
                 // salary elements
                 Element salary = doc.createElement("ano");
                 salary.appendChild(doc.createTextNode("2013"));
                 staff.appendChild(salary);
    
                 quantdadetouro = quantdadetouro + 3;
    
                 TransformerFactory transformerFactory = TransformerFactory.newInstance();
                 Transformer transformer = transformerFactory.newTransformer();
                 transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
                 doc.setXmlStandalone(true);
                 DOMSource source = new DOMSource(doc);
                 StreamResult result = new StreamResult(new File("C:\\cdc/CDCPASTO"+cdc+".xml"));
                 result.toString();
                 transformer.transform(source, result);
                 System.out.println("File saved!");
             } while (quanttouro.get(cont) > quantdadetouro);
    
             cont++;
         }
    
        } catch (ParserConfigurationException ex) {
                   Logger.getLogger(cdcpastoxml.class.getName()).log(Level.SEVERE, null, ex);
          }
    

    }
    }[/code]

ele gera o erro
[color=red]SEVERE: null
java.sql.SQLException: Before start of result set [/color]

Opa eae urbano, blz?!

Primeira dica: como boa pratica para nome de variáveis utilize o padrão lowerCamelCase, a não ser claro que seja uma constante.
Segunda dica: sempre quando precisar concatenar muitas Strings em java use o StringBuilder por questões de estética e performance, principalmente se for fazer isso dentro de um laço de repetição.

Segue um exemplo bem básico utilizando PreparedStatement:


	public void incluir(Contato contato) throws SQLException {

		conn = Conexao.getConexao();
		PreparedStatement ps = null;
		String sql = ("INSERT INTO tb_contato_caelum(NOME, EMAIL, ENDERECO, URL ,DATA) VALUES(?,?,?,?,?)");

		try {

			conn.setAutoCommit(false);

			ps = conn.prepareStatement(sql);
			ps.setString(1, contato.getNome());
			ps.setString(2, contato.getEmail());
			ps.setString(3, contato.getEndereco());
			ps.setString(4, contato.getUrl());

			ps.setDate(5, new java.sql.Date(System.currentTimeMillis()));

			ps.execute();
			conn.commit();
			

		} catch (SQLException e) {
			e.printStackTrace();
			conn.rollback();

		} finally {

			try {

				conn.setAutoCommit(true);
				if (!ps.isClosed() && ps != null)
					ps.close();
				if (!conn.isClosed() || conn != null)
					conn.close();

			} catch (SQLException e) {
				e.printStackTrace();
			}

		}

	}

Abs!

urbano, bem vindo ao fórum!

Te indico tomar algumas ações:
[list]Tenha certeza que sua query está correta: Pegue ela pelo modo debug ou imprime no console e execute no banco para confirmar.[/list]
[list]Veja aqui alguns exemplos de códigos para o que você precisa.[/list]
[list]Tente melhorar seu código. Tente separar as funções do seu sistema. Dá maneira como está escrito, você provavelmente terá problemas futuros. Separe melhor as responsabilidades.[/list]

Percebi que você está trabalhando com XML, tem um framework chama XStream que é uma mão na roda.

Qualquer dúvida posta aí.

Abraços e Boa Sorte

O meu poblema e fazer uma consulta sql e tentar outra consulta ai gera erro
[color=red]SEVERE: null
java.sql.SQLException: Before start of result set [/color]

sera que você tem um exemplo de duas consulta sql no mesmo .java para ter de referencia?

Grato

Eu optaria por dois métodos distintos e trataria os retornos em outra camada. Uma BO provavelmente.

Mas sei la se for uma restrição aí do seu projeto, (vou dar uma viajada agora rs ) vc pode colocar como retorno do seu método um List do tipo Object, aí vc adiciona os retornos dos dois selects.

Abs!

Conforme escrevi anteriormente, veja no link: http://www.guj.com.br/java/40126-exemplo-de-preparedstatement

Execute uma query simples para testar seu código. Exemplo: select * from animais limit 10