Java - exportação do output da consola

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Java - exportação do output da consola

Mensagempor vala » Quarta Fev 20, 2008 14:26

O meu problema e o seguinte:
criei um programa em jaa para aceder a uma base de dados MySql, depois queria guardar os dados num ficheiro txt mas com confirmação do tipo : para gravar prima 1 para n gravar prima outra tecla..
isso funciona mas so a um problema e que ele acede ao ficheiro mas não escreve la.
Avatar do Utilizador
vala
Membro de Ouro
Membro de Ouro
 
Mensagens: 724
Registado: Segunda Nov 19, 2007 10:25
Localização: Leiria (Batalha)

Mensagempor vamosAeles » Quarta Fev 20, 2008 16:20

Boas,

humm, acede e nao escreve, ie, cria o file mas não o enche??

Tens de ser mais explicito no problema que tens, principalmente COMO o estás a tentar resolver no cod (muitas vezes pensamos que o codigo estar a fazer uma coisa e faz algo um bocadinho diferente...)

[[]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

LOL

Mensagempor vala » Quarta Fev 20, 2008 16:35

tIPO VOU A DATA DE ULTIMO ACESSO DO FICHEIRO E DA PARA VER QUE ELE ACEDE EDITAR E QUE E PIOR
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
opcao = br.readLine();
if (!opcao.equals("1") && !opcao.equals("2") && !opcao.equals("3") && !opcao.equals("0")&& !opcao.equals("4")){
System.out.println("Opção inválida.");
}
else {
int valorOpcao = Integer.valueOf(opcao);
switch (valorOpcao){
case 1:
BufferedWriter out1 = new BufferedWriter(new FileWriter("C:/Documents and Settings/Administrador/Ambiente de trabalho/Tiago/phonebook/Outputs/Case1.txt"));
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select * from phonebook");
try {
while(rs.next()){
System.out.println(rs.getString("name") + " - " + rs.getString("phone"));
}
System.out.println("Se desejar gravar prima 1 senão prima outra tecla");
save =br.readLine();
int valorSave = Integer.valueOf(save);
switch (valorSave){
case 1:{
while(rs.next()){
out1.write(rs.getString("name") + " - " + rs.getString("phone"));
}
System.out.println("Dados gravados com sucesso");
out1.close();
}
default : System.out.println("Não gravou");
}
} finally {
rs.close();
st.close();
}
break;
Avatar do Utilizador
vala
Membro de Ouro
Membro de Ouro
 
Mensagens: 724
Registado: Segunda Nov 19, 2007 10:25
Localização: Leiria (Batalha)

Mensagempor alfatek » Quarta Fev 20, 2008 16:43

Código: Seleccionar todos
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
opcao = br.readLine();
if (!opcao.equals("1") && !opcao.equals("2") && !opcao.equals("3") && !opcao.equals("0")&& !opcao.equals("4")){
    System.out.println("Opção inválida.");
}
else {
    int valorOpcao = Integer.valueOf(opcao);
    switch (valorOpcao){
        case 1:
        BufferedWriter out1 = new BufferedWriter(new FileWriter("C:/Documents and Settings/Administrador/Ambiente de trabalho/Tiago/phonebook/Outputs/Case1.txt"));
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery("select * from phonebook");
        try {
            while(rs.next()){
                System.out.println(rs.getString("name") + " - " + rs.getString("phone"));
            }
            System.out.println("Se desejar gravar prima 1 senão prima outra tecla");
            save =br.readLine();
            int valorSave = Integer.valueOf(save);
            switch (valorSave){
                case 1:{
                    while(rs.next()){
                        out1.write(rs.getString("name") + " - " + rs.getString("phone"));
                    }
                    System.out.println("Dados gravados com sucesso");
                    out1.close();
                }
                default : System.out.println("Não gravou");
            }
            } finally {
            rs.close();
            st.close();
        }
        break;



O mesmo código mas bem formatado
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra

Mensagempor alfatek » Quarta Fev 20, 2008 16:44

Tira isto:

while(rs.next()){
System.out.println(rs.getString("name") + " - " + rs.getString("phone"));
}


ou faz rs.reset(); a seguir a isso.
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra

LOL

Mensagempor vala » Quarta Fev 20, 2008 16:46

so esta mal identado porque qando coipiei ficou logo assim
Avatar do Utilizador
vala
Membro de Ouro
Membro de Ouro
 
Mensagens: 724
Registado: Segunda Nov 19, 2007 10:25
Localização: Leiria (Batalha)

lol

Mensagempor vala » Quarta Fev 20, 2008 16:48

mas da erro no reset
Avatar do Utilizador
vala
Membro de Ouro
Membro de Ouro
 
Mensagens: 724
Registado: Segunda Nov 19, 2007 10:25
Localização: Leiria (Batalha)

Mensagempor vamosAeles » Quarta Fev 20, 2008 17:35

Agora não tou com muito tempo para olhar com mais atencao, mas uma leitura rapida:

1)tens um while(rs.next()), {prints dos registos} -> aqui o ResultSet foi lido.

2)Depois tens a pergunta de gravar e de novo while(rs.next()){grava no file}

Devido a 1) quando chegas aos 2) o rs já está no fim, logo não vai entrar no ciclo para gravar para o file.

Possiveis solucoes:
A) Vais gravando os dados do rs numa lista durante o ciclo em 1) e no ciclo em 2) gravas a lista

B) executas de novo a query, mas alguem por alterar os dados entre os dois ciclos (ie, se não garantires que apenas este processo acede a essa tabela)

C) tens q fazer rs.beforeFist() ou algo parecido, mas por defeito tal não pode ser feito, porque por defeito o rs é ... (não me lembro do nome da propriedade de cor, mas não te deixa percorrer o rs para trás). Para poderes fazer isso tens que activar uma flag do statement antes de executar a query (se tiveres interessado posso dizer-te depois como, mas agora não tou com muito tempo para procurar como se faz exactamente)


[[[]]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

Mensagempor Moebius » Quarta Fev 20, 2008 17:40

Não podes fazer essa dupla iteração sobre o ResultSet.

Na primeira, que o alfatek disse para comentares, estás a percorrer o resultset de 0 para n+1.

No fim dessa iteração, o resultSet, mantem-se em n+1, ou seja não retorna para 0.

Ou mantens os valores em variáveis ou então terás de explorar ResultSets bi-direcionais.

A primeira opção poderá ser mais lógica em termos de utilização de recursos.
Acer 7720G - Core 2 Duo T5250 - 2048 Mb RAM - 250 GB HD - 17" WXGA - nVidia Geforce 8400M GS 256 Mb
Shortly will be running on Ubuntu Gnome, Firefox and Thunderbid
Moebius
Membro de Prata
Membro de Prata
 
Mensagens: 136
Registado: Segunda Out 06, 2003 18:28
Localização: Lisboa ou Madeira, conforme o mês do ano

Re: lol

Mensagempor alfatek » Quarta Fev 20, 2008 18:10

vala Escreveu:mas da erro no reset


falei de memória, tenta fazer-lhe .first(); O objectivo é mover o cursor do resultset para o inicio, agora como é ao certo, n m lembro :P
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron