Conceitos em java

4 respostas
O

Olá pessoal,

Me considero bem novato em Java mas gostaria bastante da orientação e dicas de Vocês sobre um pequeno programa que desenvolvi.
Trata-se de um programa que se conecta ao um banco de dados (Oracle no caso) e gera arquivos de acordo com a quebra retornada na consulta.
Na verdade gostaria de ouvir Vocês sobre a arquitetura do código, a passagem de parametros / objetos e tudo mais. As questões conceituais tem a maior importância nesta minha fase de aprendizado.
Sei que existem diversas maneiras de se fazer a mesma coisa mas em Java isto parece se multiplicar ainda mais. Toda e qualquer consideração será muito bem aceita.
Desde já agradeço a todos, em especial pela paciência ok?. Segue o código

/***
 * File        : geraTexto.java
 * Author      : Oswaldo Castro (Obrigado Mayank Bawa!!!)
 * Written     : 2007-02-25
 * Description : Geração de arquivos texto de acordo com a quebra do código da escola
 *
 */

import java.sql.* ;
import java.io.*;

public class geraTexto {
	
	public static void main(String[] args) throws SQLException {

        Connection c = null;
        int codigoEscola = 0;
	PrintWriter arquivoAtual = null;
        String registro = null;

        try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:setrerj","setrerj", "setrerj");
		Statement s = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY) ;
		c.setAutoCommit(false) ;

		ResultSet rs = s.executeQuery(
/* ---- user file    ------*/
            	"select " +
            	"  mnit.prv_id cod_escola " +
		", lpad(to_char(mnit.cd_cliente)||to_char(mnit.dg_cliente), 10, '0') id_cliente " +
		", rpad(mnit.nome_aluno, 100, ' ') nome_aluno " +
		" from municipais_niteroi mnit " +
		" where mnit.foto = 'S' " + 
		" and mnit.serie_aluno between 1 and 8 " +  
		" and mnit.prv_id < 502 " +
		" order by mnit.prv_id, mnit.nome_aluno");

		while( rs.next() ) {

			if ( codigoEscola == rs.getInt("cod_escola") ) {
				registro = montaRegistro( rs );
				gravaRegistro(arquivoAtual, registro);
			} else {
				if (codigoEscola != 0) {
					fechaArquivo(arquivoAtual);
				}
				codigoEscola = rs.getInt("cod_escola");
				arquivoAtual = abreNovoArquivo(codigoEscola);
				registro = montaRegistro( rs );
				gravaRegistro(arquivoAtual, registro);
			}
		}

	} catch (ClassNotFoundException ex){
		System.out.println(ex);
	} finally {
		try {
			c.close();
		} catch (Exception e) {}
	}
	}
	
	public static PrintWriter abreNovoArquivo(int codigoEscola) {
		
		int numeroRegistros = 1;	
		System.out.println("vou gravar novo arquivo: "+codigoEscola);
		PrintWriter saidaU = null;
		String fileNameU = "e:\Niteroi_Operacao\Cadastros\Estudantes\Niteroi\Municipais\Arquivos_texto\"+codigoEscola+"_est_munic_Nit_22022007.users" ;
		
		try {
			File arquivoU = new File(fileNameU);
			if (arquivoU.exists()) {
				arquivoU.delete();
			}
			saidaU = new PrintWriter(new FileWriter( fileNameU, true ));
	
		} catch ( IOException iox ) {
			System.out.println("erro io saidaU");
		}
		return saidaU;		
	}
	
	public static String montaRegistro(ResultSet rs) {
		String registroM = null;
		try {
		registroM = rs.getInt("cod_escola")+"-"+rs.getString("id_cliente")+"-"+rs.getString("nome_aluno");
		System.out.println("Registro : "+registroM);
		} catch (SQLException ex){
			System.out.println("SQLException caught");
			System.out.println("---");
		while ( ex != null ){
			System.out.println("Message   : " + ex.getMessage());
			System.out.println("SQLState  : " + ex.getSQLState());
			System.out.println("ErrorCode : " + ex.getErrorCode());
			System.out.println("---");
			ex = ex.getNextException();
		}
		}
		return registroM;
	}
	
	public static void gravaRegistro(PrintWriter arquivo, String registro) {
		System.out.println("Registro : "+registro);
		arquivo.println(registro);
	}
	
	public static void fechaArquivo(PrintWriter arquivo) {
		System.out.println("vou fechar o arquivo :");
		arquivo.close();
	}
}

Abraços a todos

4 Respostas

Ironlynx

Oswaldo, váarias coisas aí…
Sua classe geraTexto deveria começar em maíuscula!
Vc está usando Statement, deveria usar a interface PrepareStatement, até para evitar SQL injection e tira esse sql do meio do java.Acho que vc deveria criar uma classe de “Conexão ao Banco” para separar mais as coisas…

AlexMS

Eu sugiro que você de uma olhada nessa apostila da caelum:

Na parte que trata de fábrica de conexão, DAO etc.

As apostilas disponíveis no site deles, ajuda bastante quem ta começando.

Atè,

O

AlexMS e Ironlynx

Agradeço bastante as dicas. Vou ler a apostila e melhorar o código. Após todos os ajustes se Vocês não se importarem postarei o novo código ok?

Mais uma vez obrigado

Abraços pessoal

ViniGodoy

Outra coisa que eu melhoraria é o tratamento de exceções.

Você pode usar as classes de log do Java para gerar um arquivo ou logar no console. Dê uma pesquisada no pacote java.util.logging. Uma alternativa muito usada em relação a esse pacote é a biblioteca Log4J.

Também recomendaria que você registrasse em seu programa um uncaughtExceptionHandler, para que as exceções de Runtime que não foram capturadas também sejam logadas. Você pode ver mais sobre o UncaughtExceptionHandler na classe Thread.

Criado 25 de fevereiro de 2007
Ultima resposta 26 de fev. de 2007
Respostas 4
Participantes 4