Olá pessoas, gostaria de saber como fazer um try catch que não parasse de “tentar” executar os codigos quando encontrasse uma excessão…
Por exemplo:
[code]public class TesteTryCatch {
static String teste="";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try{
teste=“aaaaaaaaa”;
System.out.println(teste.trim());
teste=“bbbbbbbbbb”;
System.out.println(teste.trim());
teste=“cccccccc”;
System.out.println(teste.trim());
teste=null;
System.out.println(teste.trim());
teste=“dddddddddd”;
System.out.println(teste.trim());
teste=“eeeeeeeeeee”;
System.out.println(teste.trim());
}catch(Exception e){
}
}
}[/code] O seguinte código tenta botar um trim() em cada string, quando ele tentar botar o trim() no momento em que a stirng for [color=blue]null[/color], ele vai gerar uma excessão, e vai parar por aí. Gostaria de saber se tem como ele continuar a tentar as outras strings mesmo depois de dar essa excessão. E eu não quero ter que fazer isso usando um try catch em cada vez que eu quiser fazer o trim.
Origado desde já.
Se não quer usar um try catch em cada então terá que verificar se a variavel não é nula.Caso contrário não consigo visualizar essa necessidade na prática.
concordo com o nickdofeliperibeiro
forçar a execução após uma exceção ta mais pra POG q outra coisa
o ideal é não gerar a exceção sendo assim
testar se variavel é nula ou não é o melhor a se fazer.
Esse método até funciona só que ai ele vai retornar a seguinte saída:
aaaaaaaaa
bbbbbbbbbb
cccccccc
null
dddddddddd
eeeeeeeeeee
[color=green]CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)[/color]
A aplicação desse exemplo é a seguinte:
Estou puxando dados de um banco de dados, e quando puxo de um campo varchar(10) por exemplo, e se nesse campo tiver o valor “XXX”, eu vou obter o uma variavel de 10 posições aonde as primeiras 3 são “XXX” e as outras 7 são espaços vazios, dessa forma:“XXX_______”
e o meu codigo tenho centenas de campos, ficaria meio gambiarrão testar se todos eles forem nulos pra fazer o trim, e detalhe que se eu usar isso aqui:
System.out.println(String.valueOf(teste).trim());
Ele vai me retornar uma string[color=orange] “null”[/color], e não um java [color=blue]null[/color].
e no seu código é só chamar esse método para qualquer campo do tipo String.
assim vc nao vai poluir seu codigo com ifs.
[]s[/quote]
Foi exatamente isso o que eu fiz, mas mesmo assim eu achei que ficou bem poluído, se eu passar isso pra outro programador o cara me enche de lixo rsrs…
Não tem algum jeito de editar o método trim() da classe String? assim eu poderia verificar se é nulo no proprio metodo trim().
Eu até tentei abrir a classe String no netBeans mas ele não deixa editar.
Já. Foi por isso que eu criei esse tópico, pois caso no banco esteja null, ele vai me retornar um java null, o que geraria a excessão.
Além disso, como estou usando JDBC, tenho que usar um método getString([color=orange]“Nome do Campo”[/color]) pra cada campo que eu quiser pegar, então eu teria que poluir o código de qualquer forma.
e no seu código é só chamar esse método para qualquer campo do tipo String.
assim vc nao vai poluir seu codigo com ifs.
[]s[/quote]
Foi exatamente isso o que eu fiz, mas mesmo assim eu achei que ficou bem poluído, se eu passar isso pra outro programador o cara me enche de lixo rsrs…
Não tem algum jeito de editar o método trim() da classe String? assim eu poderia verificar se é nulo no proprio metodo trim().
Eu até tentei abrir a classe String no netBeans mas ele não deixa editar.
[/quote]
seu código lá no topo está com cara de “teste”…
Na sua aplicação real, de onde vem os valores destes dados? formularios Swing? web?
os dados são setados em alguma Entidade? que será persistida em banco? arquivo?
pergunto isso pq quando eu quero garantir que as strings estejam “trimadas” eu uso uma das tres opções:
implemento um tipo customizado do hibernate que faz o trim pra mim (caso use hibernate e persista em db)
coloco o trim no metodo setter de cada atributo do tipo String da minha entidade.
ou eu implemento um validator que nao deixa o sujeito entar strings “nao normalizadas”
sem saber o objetvo real da tua aplicação é difícil de te dar uma idéia de onde fazer isso de uma forma mais transparente.
Minha aplicação é pra gerar nota fiscal enetrônica, o banco que eu to puxando os dados e o sistema que grava essas informações no banco não são de meu controle, eu só tenho acesso às informações.
Eu estou usando JDBC, o banco é o firebird 1.5, eu faço através de um código tipo esse:
[code]String database = “jdbc:firebirdsql:localhost/3050:”+caminhoDoBanco; // jdbc:postgresql://localhost/locadoras eh o q deve ta dentro do arquivo
String usuario = “SYSDBA”;
String senha = “masterkey”;
String driverName=“org.firebirdsql.jdbc.FBDriver”;
Connection conexao;
Statement consulta;
ResultSet resultado;
String xml;
try{
Class.forName(driverName);
conexao = DriverManager.getConnection(database,usuario,senha);
consulta = conexao.createStatement();
resultado = consulta.executeQuery(“select XXX from YYY where ZZZZ”);
while(resultado.next()){
xml+=""+resultado.getString(“campo1”)+"";
xml+=""+resultado.getString(“campo2”)+"";
//etc
}
public static String busca(String caminhoDoBanco) throws Exception {
String database = "jdbc:firebirdsql:localhost/3050:" + caminhoDoBanco; // jdbc:postgresql://localhost/locadoras eh o q deve ta dentro do arquivo
String usuario = "SYSDBA";
String senha = "masterkey";
String driverName = "org.firebirdsql.jdbc.FBDriver";
Connection conexao;
Statement consulta;
ResultSet resultado;
StringBuilder xml = new StringBuilder();
Class.forName(driverName);
conexao = DriverManager.getConnection(database, usuario, senha);
consulta = conexao.createStatement();
resultado = consulta.executeQuery("select XXX from YYY where ZZZZ");
int i = 1;
while (resultado.next()) {
String nomeCampo = "campo" + i; // nome do campo. será sequencial: campo1 campo2, ...
String valorCampo = resultado.getString(nomeCampo); // pega o valor do campo atual
xml.append("<").append(nomeCampo).append(">"); // coloca <campo#>
if (valorCampo != null) {
xml.append(valorCampo.trim()); // coloca o valor do campo trimado
}
xml.append("</").append(nomeCampo).append(">"); // coloca </campo#>
xml.append("\n"); // coloca uma nova linha
i++;
}
return xml.toString();
}
[quote=nickdofeliperibeiro]Bem…
Desculpe me a franqueza, mas acho que alguns estão fazendo confusões nas camadas.
Na verdade, eu ainda não entendi o problema.
Inicialmente, a questão era sobre a exceção.
Então, partiu-se para outra coisa.
Enfim, acho que a solução do sf.marcius é válida. Você poderia novamente resumir o problema?[/quote]
bem… o que eu entendi até aqui é que ele possui uma tabela que possui “campos”.
deseja ler esta tabela e gerar um xml no formato:
valor abc
valor d
valor efghi
no entanto está saindo
valor abc
valor d
valor efghi
e eu acredito que ele está achando feio aqueles espaços no final da string (embora isso seja ok em um xml).
por isso ele quer fazer trim() dos valores, mas alguns valores são null, fazendo levantar uma exceção.
pelo jeito ele quer que quando o campo for null, ignore o trim() (deixa em branco, pra nao dar exceção), mas está achando “feio” colocar esses trims nas camadas superiores.
buenas… foi isso que entendi pelos códigos (principalmente o último) e explicações dele
como o colega pmlm apontou, provavelmente as colunas da tabela são CHAR e não VARCHAR.