Pessoal, o que vou fazer agora, algum v�o me xingar, mas n�o vejo outra
maneira.
Cara Adelina e Hederson, notei v�rios problemas, e vou enumer�-los
abaixo.
"Adelina A. Sesconetto Borges" wrote:
>
> Oi Hederson!
>
> Resolvi este problema fazendo o meu retorno ser do tipo
> vector.
Quem usar a sua api, espera um objeto que possa navegar sobre eles, no
caso mais simples o proprio java.sql.ResultSet serve. Se colocar um
vetor, deve-se dizer em algum lugar a estrat�gia adotada (sua mensagem
abaixo)
> Se o acesso ao banco tiver erros eu armazeno no primeiro
> elemento do vector uma string com o erro, se der ok no primeiro elemento do
> vector eu armazeno o result set. Caso voc� queira o c�digo que faz isso mande-me
> uma mensagem.
Aqui existe uma estrat�gia bastante duvidosa, pois os clientes da api
dever�o saber o que significa o 1o elemento, e o seu cliente dever� ter
o seguinte c�digo.
Vector result = consulta("Joao Silva");
Object o = result.get(0);
if (o instanceof String) {
// erro
String mensagemErro = (String) o;
} else if (o instanceof ResultSet) {
ResultSet resultSet = (ResultSet) o;
// navegar no result;
}
// Neste momento existe um vetor que n�o serve pra nada!!!!!!!
Al�m do mais, usar Vector deliberadamente � um erro, pois Vector � uma
classe sincronizada, todo o acesso � sincronizado, pode-se usar um
ArrayList (Vector e ArrayList s�o wrappers para arrays)
Abaixo continuo o coment�rio do Hederson, com uma solu��o simples.
SOLU��O AO FIM...
> Adelina
>
> HEDERSON wrote:
>
> > Ola Pessoal,
> > Eu criei um metodo que retorna um objeto do Java.sql.resultset. Dentro
> > deste m�todo eu faco uma consulta em algumas tabelas do banco de dados e
> > retorno o resultado utilizando o java.sql.resultset. O problema � que na
> > hora de tratar os erros eu nao tenho como retornar
> > um valor do tipo java.sql.resultset, como eu resolvo isto?
> > private java.sql.ResultSet consultarTiporesposta(String paramDescricao)
> > throws SQLException, Exception {
SQLException e Exception j� est�o declaradas, pra que colocar o catch
abaixo?
Lan�ar java.lang.Exception n�o � uma boa, pois os clientes da api,
dever�o capturar java.lang.Exception sem sentido. Coloque em uma
AppException (uma classe de excess�o criada por voc�) se for necess�rio.
> > Connection Cn;
> > String StrSQL;
> > PreparedStatement pstmt;
> > ResultSet Rs;
> > int qtdRegistro;
> > try {
> > Banco Bd = new Banco();
> > Cn =
> > Bd.Conectar("COM.ibm.db2.jdbc.app.DB2Driver","jdbc:db2:simulado","db2admin",
> > "db2admin");
Pra que uma classe Banco, sendo que toda a conex�o,usuario/senha �
resolvido aqui???
Use o DriverManager.getConnection
> > Statement stmt = Cn.createStatement();
> > stmt.execute("set schema = db2admin");
> > StrSQL = " Select pCodigo,pDescricao,pAtivo,pDesabilitarQuestoes "
> > +
> > " from TipoResposta where pDescricao like % " +
> > paramDescricao + "%";
> > pstmt = Cn.prepareStatement(StrSQL);
> > Rs = pstmt.executeQuery(StrSQL);
> > stmt.close();
> > pstmt.close();
> > Cn.close();
Se ocorrer algum erro (na execu��o da query por exemplo), o fluxo �
interrompido e os objetos n�o s�o liberados (conex�o, resultset,
statement)
Coloque-os em uma cl�usula finally.
> > return Rs;
> > }
> > catch (java.sql.SQLException e) {
> > System.out.print(Integer.toString(e.getErrorCode()) + "-" +
> > e.getMessage());
Decida se voc� quer capturar ou lan�ar a excess�o!
N�o � boa pr�tica capturar E lan�ar a MESMA excess�o.
> > ??? Como retornar um valor do tipo java.sql.resultset?
> > }
------------------------------------------------------
Com a solu��o abaixo (n�o compilei, provavelmente deve ter algum erro,
mas o importante � a id�ia), seu cliente pode usar da seguinte forma
//
// c�digo do cliente da api
//
try {
// colocar em bloco try/catch por causa do MyAppException e porque
voc� quer capturar alguma mensagem SE algo der errado
ResultSet result = consultarTiporesposta("Joao Silva");
if (result == null) {
// algum erro que a SQLException nao capturou
// decida como trat�-lo
}
} catch (MyAppException appexcp) {
// agora sim, voc� tem a memsagem de erro, olhe a classe
MyAppExcepion.minhaMensagem();
// que voc� pode utilizar do jeito que bem entender.
}
//
// api de acesso ao bd
//
private java.sql.ResultSet consultarTiporesposta(String
paramDescricao) throws MyAppException {
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
connection = getConnection();
Statement stmt = connection.createStatement();
stmt.execute("set schema = db2admin");
String strSQL = " Select
pCodigo,pDescricao,pAtivo,pDesabilitarQuestoes "
+ " from TipoResposta where pDescricao like % "
+ paramDescricao + "%";
pstmt = connection.prepareStatement(strSQL);
rs = pstmt.executeQuery(strSQL);
} catch (java.sql.SQLException sqle) {
throw new MyAppException("Nao foi possivel executar a consulta
ao tipo de resposta, por favor bla bla bla...", sqle);
} finally {
close(rs);
close(stmt);
close(connection);
}
return rs;
}
class MyAppException extends Exception {
SQLException sqle;
public MyAppException(String message, SQLException sqle) {
super(message);
this.sqle = sqle;
}
public void printStackTrace() {
super.printStackTrace();
sqle.printStackTrace();
}
public String minhaMensagem() {
// implemente algum metodo setMensagemAdicional
// para coloar algum outro tipo de mensagem
return "Sua mensagem formatada do jeito que quiser!";
}
}
void close(Connection conn) {
if (conn != null) {
conn.close();
}
}
void close(Statement stmt) {
if (stmt != null) {
stmt.close();
}
}
void close(ResultSet rs) {
if (rs != null) {
rs.close();
}
}
Connection getConnection() {
Connection conn = null;
try {
conn =
DriverManager.getConnection("COM.ibm.db2.jdbc.app.DB2Driver","jdbc:db2:simulado","db2admin",
"db2admin");
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
return conn;
}
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------