ResultSet trava no while

11 respostas
T

Pessoal, tenho um ResultSet um pouco grande, e quando percorro ele com o while, depois de um certo registro, simplesmente trava (nao vai em erro, a aplicaçao continua rodando mas nao anda)

o codigo è simples:

private static final String sql = "SELECT NUM_POLIZZA FROM DBA.TMP_QUALITA_INPUT_VITA";
private static ResultSet rs = null;

public static void main(String[] args) throws IOException {

    con = getConnection();
    con.setAutoCommit(false);
    ps = con.prepareStatement(sql);
    rs =  ps.executeQuery();
    con.commit();

     while (rs.next()){

     // numPolizze = rs.getString(1);   // mesmo comentado ele trava quando tenta ir pro next, depois de uns 60 registros

     }

...
}

o resultado da query sao mais ou menos 32 mil linhas, mas de uma coluna sò
ele percorre uns 60 registros, e depois trava

o problema è com o tamanho do ResultSet?

valeu,
Tiago

11 Respostas

R

A princípio está certo. Tamanho de ResultSet não é problema. É a solucão!!! :smiley:

Tente utilizar try e catch ao invés de jogar a exception para o nada. :frowning:

try {
  ..
  teu código aqui..
  ..
} catch (Exception e) {
  e.printstacktrace();
}

Imprima a exception no console e poste aqui novamente, ok? :wink:

T

Meu còdigo jà està utilizando try catch… removi do exemplo apenas para ficar mais claro.

Esse que è o problema. Como eu escrevi anteriormente, ele nao vai em exceçao, fica processando quando chama o next() mas nao sai nunca mais dali.

Tiago

R

Opa,

então posta todo o código aqui, inclusive com o try e catch.

obrigado.

T

è isso ai o còdigo, com o try catch hehe

public class CaricaFlagPolizze {

	static Driver drive = null;	
	static Connection con = null;
	static PreparedStatement ps = null;

	private static final String sql = "SELECT NUM_POLIZZA FROM DBA.TMP_QUALITA_INPUT_VITA";

	private static ResultSet rs = null;
	
	
	public static void main(String[] args) throws IOException {
		
		try 
               {
			

			String numPolizze = null;
					
			con = getConnection();
			con.setAutoCommit(false);
		
		    try
		    {
		    	ps = con.prepareStatement(sql);
		    	rs =  ps.executeQuery();
		    	con.commit();
		    } catch (OutOfMemoryError out){
		    	e.printStackTrace(); 
		    }catch (Exception a){
                        e.printStackTrace();
		    }
	    	
		    System.out.println("CONNECTED");

	    	

		    
			System.out.println("LISTED");
		    


		    
	    	     while (rs.next())
	    	     {
//	    	         	numPolizze = rs.getString(1);
	    	 	
	    	     }
	    	

	    	
	    	     ps.close();
	    	     con.close();
	    	
	    	     System.out.println("Sucessful");
		  	
		} catch (SQLException e) {

			e.printStackTrace();
			System.out.println("error");
		}

	}
}

valeu!

F

qual drive tu usa? e para qual banco ele aponta?.. com o breaking point … ele chega no while? vem algum resultado com o getstring?

T

uso o driver “com.sybase.jdbc3.jdbc.SybDriver”, o banco se chama Sybase IQ

chega no while sim… itera umas 60 vezes, sempre trazendo resultado no getString… dai sempre depois desse registro, quando chama o next() ele trava… fica pendurado, antes de chamar o getString (atè comentei o getString pra ver se era o problema)

valeu

WRYEL

eu to com o mesmo problema, mas na verdade, eu não sei se estou no caminho certo :stuck_out_tongue:

<%
Mysql mysql = new Mysql();
try{
	mysql.createPreparedStatement("SELECT ?, ?, ? FROM usuarios");
	mysql.statement.setString(1, "id");
	mysql.statement.setString(2, "user");
	mysql.statement.setString(3, "pass");
	
	ResultSet rs = mysql.statement.executeQuery();
	while(rs.next()){
		out.write(rs.getString("id"));
	}
}catch(Exception e){
	e.printStackTrace();
}
%>

o resultado ta sendo:

ididid

ps: pelo menos o numero de vezes no loop ta certo :stuck_out_tongue:
só tem 3 linhas mesmo !

Alguma ideia ?

wag_ferreira

Qual é o tipo do seu campo que ta recebendo os valores do result??

String…Integer…???

T

WRYEL:
eu to com o mesmo problema, mas na verdade, eu não sei se estou no caminho certo :stuck_out_tongue:

<%
Mysql mysql = new Mysql();
try{
	mysql.createPreparedStatement("SELECT ?, ?, ? FROM usuarios");
	mysql.statement.setString(1, "id");
	mysql.statement.setString(2, "user");
	mysql.statement.setString(3, "pass");
	
	ResultSet rs = mysql.statement.executeQuery();
	while(rs.next()){
		out.write(rs.getString("id"));
	}
}catch(Exception e){
	e.printStackTrace();
}
%>

o resultado ta sendo:

ididid

ps: pelo menos o numero de vezes no loop ta certo :stuck_out_tongue:
só tem 3 linhas mesmo !

Alguma ideia ?

mas o teu itera atè o final entao?

o meu problema è diferente, congela durante o while…

wag_ferreira

Seguinte…
Se vc esta utilizando um integer…
Utilize LONG…poois pode estar estorando a tua variavel…
Ja aconteceu isto comigo

T

entendi, eu recebia em uma String, mas um por vez… mas no caso eu atè comentei, ou seja, nao estou atribuindo o resultado a nenhuma variavel, apenas iterando!

Criado 29 de outubro de 2008
Ultima resposta 31 de out. de 2008
Respostas 11
Participantes 5