Gravação de TXT a partir de um ResultSet

10 respostas
Emerson_Bolsoni

Olá, boa tarde,

Estou com uma duvida, na tentativa de gravar um arquivo txt com as informações obtidas do resultSet, estou tendo um erro de SQL onde aparece a seguinte mensagem “NO DATA FOUND”, mas eu uso um printf para resgatar o valor do ResultSet e a informação do banco de dados é mostrada.
A linha com a seta é a linha que gera o erro (visualizei isso pelo debug)
Alguem pode me ajudar… segue abaixo o codigo:

import java.io.*;
import java.sql.*;
import javax.swing.JOptionPane;

public class GravaTXT {
	public static void ConectaBanco(String SQL){
		try{
			Connection con = null;
			String dns = "jdbc:odbc:DBQ=d:\MeusCds.mdb;Driver={Microsoft Access Driver (*.mdb)}";
			String usuario = "";
			String senha = "";
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			con = DriverManager.getConnection(dns,usuario,senha);
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery(SQL);
			while (rs.next())
			{
				JOptionPane.showMessageDialog(null,rs.getString("autor"));
				FileWriter gravar = new FileWriter(new File("d://destino.txt"),true);
				PrintWriter destino = new PrintWriter(gravar,true);
			     -> destino.println(rs.getString("autor"));
				gravar.close();
				destino.close();
			}
			st.close();
			con.close();
		} catch(ClassNotFoundException e){
			e.printStackTrace();
		} catch (SQLException e){
			e.printStackTrace();
		} catch (FileNotFoundException e){
			e.printStackTrace();
		} catch (IOException e){
			e.printStackTrace();
		}
	}
	public static void main (String a[]){
		ConectaBanco("SELECT * from Faixas");
	}
}

10 Respostas

J

Por favor coloque aqui todo o stacktrace pra dar uma olhada melhor.

E outra coisa, por que você colocou a geração do arquivo dentro do loop da consulta?

Não deveria criar o arquivo fora do loop, populá-lo e depois no final do loop fechar a variável??

Emerson_Bolsoni

Segue o Stacktrace:

java.sql.SQLException: No data found

at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)

at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)

at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)

at GravaTXTNitido.ConectaBanco(GravaTXTNitido.java:21)

at GravaTXTNitido.main(GravaTXTNitido.java:38)

eu coloquei a gravação do arquivo dentro do while porque eu quero que ele grave um arquivo com o nome diferente e somente com a informação da linha do resultset. Se eu colocar fora do while eu perco a informação daquela linha e só pego a ultima não é isso?

não tentei fazer dessa forma que vc sugeriu , mas vou tentar agora

J

Bom, acho que nunca fiz um “select * from” no java, sempre coloquei o nome das colunas, por isso faça um teste aí, coloque explicitamente o nome das colunas do seu select pra depois fazer os rs.getString(“nome da coluna”).

Outra coisa, faça sempre os rs.get conforme o tipo da coluna na base, rs.getInt() pra tipo number e rs.getString() pra tipo varchar2.

Emerson_Bolsoni

isso eu ja testei e mesmo alterando o select ou o tipo do get,da esse erro…

e ja conferi, a coluna é String e o comando que eu estou usando é o getString…

Emerson_Bolsoni

o pior é que no primeiro JOptionPane que eu coloco ele traz o valor que está no banco mas ele não grava no arquivo…

estranho né…

J

Outra coisa, cadê a conta e senha pra passar pro banco na hora da conexão?? Não precisa??

Emerson_Bolsoni

não, não tem conta e senha,…
e a conexão ta funfando porque, como eu falei, ele traz o primeiro registro no JOptionPane que eu coloquei.

J

Tente isso pra gerar o arquivo no cliente:

File fArqEx = new File("D:/temp/","<nome_do_arquivo.txt>");     
if (fArqEx.exists()) {
fArqEx.delete();
} 
FileWriter fwArq = new FileWriter(fArqEx); 
while (rs.next()) {
fwArq.write(rs.getString("autor")); 
}

fwArq.close();
Emerson_Bolsoni

Agora rolou juliano, só que ele não pula linhas, existe outro comando que pule linhas conforme as informações vão sendo gravadas?

Emerson_Bolsoni

ja consegui pular a linha cara… valeu mesmo!!! muito obrigado pela ajuda

Criado 18 de setembro de 2006
Ultima resposta 18 de set. de 2006
Respostas 10
Participantes 2