Classe e Interface

Pessoal,

Como faco para criar uma classe ou interface que receba um ResultSet e quando faco o (Cast) ele me retorne:

Integer getInteger();

através do

int getInt();

class XYZ implements ResultSet{
  Integer getInteger(){
   return new Integer(this.getInt());
  }

}

e quando eu der:

 XYZ qq=(XYZ)executeQuery();

e ai faco:

qq.getInteger(); e me retorna o valor já como WRAPPER.

mas está gerando erro! tem essa possibilidade?

Integer i = new Integer( rs.getInt(0) );

Caro Daniel,

quero fazer isso automatico e transparente entendeu?

valeu

Integer i = (Integer) rs.getObject(0);

acho que vou explicar melhor…

tenho isso:
ResultSet rs=executeQuery();

Integer s=new Integer(rs.getInt(1));

e quero fazer isso:

MeuResultSet d=executeQuery();

Integer x=d.getInteger(1);

entendeu?[/code]

Você leu minhas respostas?
Então tire suas conclusões.

Vc quer isso?

public class MeuResultSet implements ResultSet{ //Methodos a serem implementados... }

Desculpe… Nao li seu primeiro topico direito…

C vc reparar bem no post do daniel vera q o q ele quis dizer eh q sua chamada ao methodo getInt esta errada…

Nao existe:

return new Integer(this.getInt()); 

Dah uma olhadinha nas possiveis construcoes do methodo e repense sua implementacao:

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html#method_summary

isso…só que desse jeito tenho que implementar todos…pois a classe não é abstrata…como faço?

Ooops… Respondemos juntos…

De uma olhada na resposta q coloquei antes da sua!

Errei na hora de digitar…o problema é quando faço o cast ele dá pau!

executeQuery();

Retorna a instancia de um objeto q tb implementa a ResultSet…

Este objeto nao esta gostando de receber como cast o MeuResultSet

como resolvo este problema?

Qual objeto possui o executeQuery ??

a interface ResultSet do JDBC

Cara, da maneira que voce esta querendo fazer nao vai funcionar… voce vai receber uma referencia para um resultset da implementacao jdbc do driver que voce estiver usando… o que vc esta tendando resultaria na necessidade de implementacao de todos os metodos da interface, o que resulta na necessidade de controlar a posicao do cursor, verificar se ha registros e varios outros detalhes. Mesmo que a maior parte dos metodos voce delegue para a referencia original, vai ser muita duplicacao de codigo.

Essa ideia de implmementacao, pelo menos nos exemplos / necessidades que voce esta mostrando, nao tem muito sentido para existir… voce tera mais problemas com ela do que sem.

Se voce quiser tanto assim evitar o uso de new Integer() ( alias… eh soh para isso que voce quser a classe? ), entao use alguma coisa como

class RSWrapper {
    private ResultSet rs;

    public RSWrapper(ResultSet rs) {
        this.rs = rs;
    }
    
    public Integer getInteger(int pos) {
        return new Integer(this.rs.getInt(pos));
    }

    public Integer getInteger(String column) {
        return new Integer(this.rs.getInt(column));
    }
}

...

RSWrapper w = new RSWrapper(teuRs);
Integer i = w.getInteger("id");

Mas mesmo assim eh algo ruim.

Rafael

Esse problema se resolve facilmente com o padrao Adapter.

Esse padrao converte a interface de uma classe em outra interface
esperada pelos clientes.

Existem muitas formas de fazer, uma delas é utilizando um “Objeto Adapter” como no exemplo abaixo:

class MeuResultSet{
	
	private ResultSet rs;
	
	public MeuResultSet(ResultSet rs){
		this.rs = rs;
	}
	
	public Integer getInteger(int param){
		Integer n = new Integer(rs.getInt(1));
		return n;
	}
}

Uma pesquisa sobre Padroes é sempre bom pq resolve problemas simples como esses de uma forma estandarizada.