Galera, está quase acabando?

11 respostas
D

Bem, este é o código, que eu precisava, apanhei mas consegui chegar ao meu objetivo, agora só falta eu jogar este cara em um arquivo txt, como eu podeira fazer isso, já li o tutorial aqui mas não sei aonde começar a incluir o código para salvar em txt.

Ah, mas eu preciso jogar uma linha tipo um cabeçalho no txt e depois tranferir os dados, esse cabeçalho seria o nome das colunas separados por tabulação “tab”.

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

public class normalizacao_mdb

{

public static void main(String args[])

{

String url = jdbc:odbc:java;

try

{

class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

Connection conn = DriverManager.getConnection(url);

System.out.println(Conexao efetuada com sucesso !!!);

System.out.println(Aguarde, programa sendo executado, isso pode levar alguns minutos !!!);
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT * FROM REP13_Consulta");
FileWriter writer = new FileWriter("normalizacao_ddd.txt"); 
    PrintWriter out = new PrintWriter(writer); 
    //Declaração das variáveis do programa
    String codbrick = null;
String dscbrick = null;
String repetecodigobrick = null,repetedscbrick = null,repetedscproduto = null,repetecodproduto = null,repetecodclasse = null;
String datavalor1 = null,datavalor2 = null,datavalor3 = null,datavalor4 = null,datavalor5 = null,datavalor6 = null,datavalor7 = null;
//fim

while(rs.next()) 
{
String codigo = rs.getString("COD_BRICK");
	if(codigo.equals("4.0")) 
			{	
			codbrick = rs.getString("DSC_BRICK");
    		dscbrick = rs.getString("DSC_PRODUTO");
            	}
		else 
		if (codigo != ("4.0")) 
			{
			repetecodigobrick = codbrick;
			repetedscbrick = dscbrick;
			repetedscproduto = rs.getString("DSC_PRODUTO");
			repetecodproduto = rs.getString("COD_PRODUT");
			repetecodclasse = rs.getString("COD_CLASSE");
			datavalor1 = rs.getString("09/2001");
			datavalor2 = rs.getString("10/2001");
			datavalor3 = rs.getString("11/2001");
			datavalor4 = rs.getString("12/2001");
			datavalor5 = rs.getString("01/2002");
			datavalor6 = rs.getString("02/2002");
			datavalor7 = rs.getString("03/2002");
			//System.out.println(repetecodigobrick+"	"+repetedscbrick+"	"+repetedscproduto+"	"+repetecodproduto+"	"+repetecodclasse+"	"+datavalor1+"	"+datavalor2+"	"+datavalor3+"	"+datavalor4+"	"+datavalor5+"	"+datavalor6+"	"+datavalor7);
		}
}
rs.close();
stmt.close();	
conn.close();
out.close(); 
    writer.close(); 
    }
	catch (ClassNotFoundException cnfex)
	{
  	System.err.println("Falha na leitura do driver JDBC/ODBC");
  	System.exit(1);
}
catch (IOException ioex) 
    { 
    System.err.println("Erro de IO"); 
    System.exit(1); 
    } 
	catch (SQLException sqlex)
	{
	System.err.println("Falha no SQL, Verifique o ODBC ou o nome do campo que está sendo selecionado"); 
    System.err.println(sqlex); 
    sqlex.printStackTrace(); 
    System.exit(1); 
}
finally
{
System.err.println("Programa executado com sucesso!!");
}
  }

}

11 Respostas

Rafael_Steil

Ola Darta, tudo bom?

Voce fez tudo no seu codigo, agora so falta gravar os dados no txt, certo? Como voce ja criou o arquivo ( normalizacao_ddd.txt ), basta trocar a linha que contem

//System.out.println(repetecodigobrick+" "+repetedscbrick+" "+repetedscproduto+" "+repetecodproduto+" "+repetecodclasse+" "+datavalor1+" "+datavalor2+" "+datavalor3+" "+datavalor4+" "+datavalor5+" "+datavalor6+" "+datavalor7);

para

out.println(repetecodigobrick+" "+repetedscbrick+" "+repetedscproduto+" "+repetecodproduto+" "+repetecodclasse+" "+datavalor1+" "+datavalor2+" "+datavalor3+" "+datavalor4+" "+datavalor5+" "+datavalor6+" "+datavalor7);

Para adicionar uma linha contendo os headers, coloque a mesma chamada a out.println() formatando da maneira que voce quiser ANTES de entrar no while()

[]'s
Rafael Steil

D

Bem coloquei do jeito que vc falou, mas deu erro no out, do out.println(…)
o que pode ser?

bem se for melhor eu fiz assim agora,

System.err.println(Aguarde, gravando o resultado em um arquivo texto);

FileInputStream stream = new FileInputStream(saida);

InputStreamReader streamReader = new InputStreamReader(stream);

BufferedReader reader = new BufferedReader(streamReader);

FileWriter escrevearquivo = new FileWriter(“normalizacao_ddd.txt”);
PrintWriter saidaarquivo = new PrintWriter(escrevearquivo);

só que está dando erro de io? ele criou o arquivo mas não gravou nada, o que pode ser, já tive uma resposta em relação a isso, mas não consegui resolver!!

Rafael_Steil

Qual o erro que esta ocorrendo? É aconselhável você trocar a linha

catch (IOException ioex)
{
        System.err.println("Erro de IO");
        System.exit(1);
}

para

catch (IOException ioex)
{
        System.err.println("Erro de IO: "+ ioex);
        System.exit(1);
}

Dessa forma será possível visualizar o erro. As vezes é problema de permissão no diretório, por exemplo. Mas o código está certo, de qualquer maneira.

[]'s
Rafael

D

esta é a messagem de erro que está dando!!

Undefined variable or class name: out!!!

Rafael_Steil

Mas então você mudou o código fonte? porque no exemplo que você postou há a seguinte linha de código:

PrintWriter out = new PrintWriter(writer);

Ela não existe mais? note que postei os comentários usando como base o seu código bem no início deste tópico!

Rafael

D

No meu serviço, ele estava rodando, dava o erro de io, agora aqui em casa está dando este erro quando executa java normalizacao_mdb

Exception in thread “main” java.lang.NoClassDefFoundError: normalizacao_mdb

não entendi pq deu este erro, pode ser o jdk?? pois não vejo erro nenhum nas classes que utilizo no meu programa!!

Rafael_Steil

Dê uma lida no artigo “Os erros e dúvidas de um iniciante” aqui no guj mesmo, o qual irá lhe ajudar bastante. Já adiantando, verifique se o nome do arquivo é o mesmo nome da sua classe, e se a variável de ambiente CLASSPATH esta corretamente definida. Muitas vezes o problema é a falta do diretório atual na variável. Por exemplo, a maneira correta seria

CLASSPATH=.:$CLASSPATH ( no linux )
ou
CLASSPATH=.;%CLASSPATH% ( no windows )

Verifique isso. Caso tenha alguma dúvida em relação à configuração de tal variável de ambiente, leia o tutorial “Instalando e configurando o JDK no Windows” aqui no guj também.

Rafael

D

Este é o código, depois do while, eu tento cria o txt e gravar tudo dentro dele, ele chega a criar o txt, mas não grava nadam, dá uma menssagem de Erro io, no IOException ioex, enão não grava nada dentro del só cria o txt!!

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

public class normalizacao_mdb

{

public static void main(String args[])

{

String url = jdbc:odbc:java;

try

{

class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

Connection conn = DriverManager.getConnection(url);

System.out.println(Conexao efetuada com sucesso !!!);

System.out.println(Aguarde, programa sendo executado, isso pode levar alguns minutos !!!);
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT * FROM REP13_Consulta");

    //Declaração das variáveis do programa
    String codbrick = null;
String dscbrick = null;
String repetecodigobrick = null,repetedscbrick = null,repetedscproduto = null,repetecodproduto = null,repetecodclasse = null;
String datavalor1 = null,datavalor2 = null,datavalor3 = null,datavalor4 = null,datavalor5 = null,datavalor6 = null,datavalor7 = null;
String saida = null;
//fim
//Exibe o cabeçalho das colunas
//System.out.println("COD_BRICK	"+"DSC_BRICK	"+"DSC_PRODUTO");
//Fim
while(rs.next()) 
{
String codigo = rs.getString("COD_BRICK");
	if(codigo.equals("4.0")) 
			{	
			codbrick = rs.getString("DSC_BRICK");
    		dscbrick = rs.getString("DSC_PRODUTO");
            
            	}
		else 
		if (codigo != ("4.0")) 
			{
			repetecodigobrick = codbrick;
			repetedscbrick = dscbrick;
			repetedscproduto = rs.getString("DSC_PRODUTO");
			repetecodproduto = rs.getString("COD_PRODUT");
			repetecodclasse = rs.getString("COD_CLASSE");
			datavalor1 = rs.getString("09/2001");
			datavalor2 = rs.getString("10/2001");
			datavalor3 = rs.getString("11/2001");
			datavalor4 = rs.getString("12/2001");
			datavalor5 = rs.getString("01/2002");
			datavalor6 = rs.getString("02/2002");
			datavalor7 = rs.getString("03/2002");
			saida = (repetecodigobrick+"	"+repetedscbrick+"	"+repetedscproduto+"	"+repetecodproduto+"	"+repetecodclasse+"	"+datavalor1+"	"+datavalor2+"	"+datavalor3+"	"+datavalor4+"	"+datavalor5+"	"+datavalor6+"	"+datavalor7);
			}
}
//Criando o arquivo txt
System.err.println("Aguarde, gravando o resultado em um arquivo texto"); 
FileInputStream stream = new FileInputStream(saida); 
InputStreamReader streamReader = new InputStreamReader(stream); 
	BufferedReader reader = new BufferedReader(streamReader); 

FileWriter escrevearquivo = new FileWriter("normalizacao_ddd.txt"); 
    PrintWriter saidaarquivo = new PrintWriter(escrevearquivo); 
	    	
rs.close();
stmt.close();	
conn.close();
saidaarquivo.close(); 
    escrevearquivo.close();
    reader.close(); 
    streamReader.close(); 
    stream.close(); 
    }
	catch (ClassNotFoundException cnfex)
	{
  	System.err.println("Falha na leitura do driver JDBC/ODBC");
  	System.exit(1);
}
catch (IOException ioex) 
    { 
    System.err.println("Erro de IO"); 
    System.err.println("Arquivo não gravado"); 
    System.exit(1); 
    } 
	catch (SQLException sqlex)
	{
	System.err.println("Falha no SQL, Verifique o ODBC ou o nome do campo que está sendo selecionado"); 
    System.err.println(sqlex); 
    sqlex.printStackTrace(); 
    System.exit(1); 
}
finally
{
System.err.println("Programa executado com sucesso!!");
}
  }

}

Rafael_Steil

Darta, mude o código

System.err.println("Erro de IO");

para

System.err.println("Erro de IO: "+ ioex);

Assim poderemos saber exatamente qual o erro que esta ocorrendo, já que será mostrado na tela a exceção gerada!!

[]'s
Rafael

D

Está dando o erro

Exception in thread “main” java.lang.NoClassDefFoundError: normalizacao_mdb

fiz o que manda no site, mas parece que vou ter que rebutar, se vc puder esperar até eu voltar eu agradeço,.

é estranho, aqui no guj, ele manda escrever javac no prompt do dos, se aparecer uma menssagem grande com as explicações é porque ele está funcionndo, e foi exatamente o que aconteceu, exibiu as explicações, mas dá o erro com rodo a classe.

Guilherme_Silveira
  1. o erro na tua empresa
    tente alterar a linha q diz que deu erro. acrescente o seguinte:
    iex.printStackTrace();
    isso vai indicar em qual linha ocorreu o erro, MUITO melhor pra descobrir o problema ok?

  2. o erro na tua casa
    o jdk foi isntalado corretamente mas voce esta errando na hora de chamar o “java”.
    tente:

java -cp .;%CLASSPATH% nomedaclasseaqui

ou algo do genero se sua maquina rodar linux/unix.
isso altera o classpath para encontrar as classes e eh esse o erro que voce esta tendo ai em casa

abracao

guilherme

Criado 6 de setembro de 2002
Ultima resposta 7 de set. de 2002
Respostas 11
Participantes 3