JDBC + Proximo

8 respostas
G

Olá a todos do forum! Gostaria de saber porque esse codigo não funciona!

public void proximo(ActionEvent e){
		
		try{
			Class.forName("org.gjt.mm.mysql.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost/casa", "root","rossi");
			st = conn.createStatement();
			rs = st.executeQuery("select id, name from pessoa");
			while(rs.next()){
				int x = rs.getInt("id");
				String nome = rs.getString("nome");
				String b = "" + x;
				jTextField.setText(b);
				jTextField1.setText(nome);
			}
		}catch(ClassNotFoundException cnfe){
			cnfe.getMessage();
		}catch(SQLException sqlex){
			sqlex.getMessage();
		}catch(Exception ex){
			System.out.println("Nao ha proximo mais");
		}
		
	}// fim do método proximo

O que eu queria fazer é: toda vez que apertar o botão de proximo ele desse os valores nos campos de texto. só que isso não ocorre. parece que não existe uma atualização…
alguem pode ajudar?
grato!

8 Respostas

kaique

Cara, seguinte:
Se você estiver chamando o método proximo(ActionEvent e) sempre que apertar em um botão, você percorrerá por todos os registros encontrados no select que criou, e também ira setá-los nos dois textFields que está usando. Você está dizendo que parece que não existe atualização, o problema é que você está atualizando os objetos em cada loop da iteração, e isso ocorre muito rápido, por isso você tem a impressão da não atualização.
O que você precisa fazer é, em um método separado, criar esse ResultSet e guardá-lo para usá-lo no método próximo e somente chamar o próximo registro…
Deu pra entender?
Qualquer coisa tamos aí…

[]'s.

G

Colega eu não entendi muito bem isso que voce disse. Como posso então fazer ele passar mais devagar? Eu ja tinha percebido que as caixas de textos recebiam algo mas nada mostrava… Tem algum jeito disso melhorar?
grato pela ajuda.

N

gollun,

Para fazer isto, vc precisa saber em que registro está atualmente. Por exemplo, deve pegar o Id do registro visulizado anteriormente e usá-lo no seu select:

Select * from tabela where Id > ?

Se vc está visualizando num registro por vez, pode usar a cláusula Limit para limitar os registros retornados assim:

Select * from tabela where Id > ? Limit 1
kaique

Cara, a minha opnião para você resolver o seu problema:
Primeiro, você coloca o código para executar o select e criar o ResultSet em um método, aí você guarda esse ResultSet em algum lugar. Depois, em outro método, você usa o ResultSet que você criou antes somente para executar os next() e previous() e preencher os dois campos de texto que você tem.
Deu pra entender agora?

[]'s.

G

Entendi assim: Executar o select no ResultSet e depois executar fora do while o procedimento de next ou previous. Eu acho que é assim. Tem como mostrar para mim como voce faria o codigo?
Não que eu queira pronto. Mas to pegando a ideia em pedaços e juntando e mesmo assim não tá muito claro.
Eu ja consegui fazer o botão primeiro e ultimo mas esse de next ta deixando eu louco.
grato.

kaique

Cara, acho que seria algo ± assim:

public class Finder {

   private ResultSet rs;

   public void searchRegs() {
      Class.forName("org.gjt.mm.mysql.Driver");  
      conn = DriverManager.getConnection("jdbc:mysql://localhost/casa", "root","rossi");  
      st = conn.createStatement();  
      rs = st.executeQuery("select id, name from pessoa");
   }

   public void nextValue() {
      rs.next();
      /* Preencher os campos com os valores encontrados */
   }

   public void previousValue() {
      rs.previous();
      /* Preencher os campos com os valores encontrados */
   }

   public void clearResultSet() {
      rs.close();
   }

}

Essa foi uma forma rápida de te explicar ± o que estva falando, não sei se esse código está correto. Caso não esteja, corrige aí que acho que é uma boa forma de resolver o seu problema…
Qualquer coisa tamos aí…

[]'s.

G

Kaique. Sua ajuda foi grande. Agora eu to desenvolvendo legal uma nova classe sem o swing. Mas a duvida fica como posso mandar para duas caixas de texto a informação do banco sendo que o método é void e esta em classes diferentes?

meu codigo de Next() é esse:

public void nextValue(ResultSet rs){
	  try{
		  rs.next();
	  }catch(SQLException sqlex){
		  sqlex.printStackTrace();
	  }
  }// Fim do método Next()

To chegando no lugar certo?
grato.

kaique

Cara, minha visão para sua solução são as seguinte:

1 -> Retorne os valores encontrados no ResultSet para a sua janela;

2 -> Envie como parâmetro do método que percorre o ResultSet os componentes que você quer preencher;

3 -> Crie esses método para buscar os registros e manipular o ResultSet dentro da sua janela;

Na minha visão, o que seria mais elegante seria retornar os valores para a sua janela, usando Value Objects. Dá uma pensada aí como você acharia melhor…

[]'s.

Criado 16 de fevereiro de 2008
Ultima resposta 17 de fev. de 2008
Respostas 8
Participantes 3