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
por 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.
-

vala
- Membro de Ouro

-
- Mensagens: 724
- Registado: Segunda Nov 19, 2007 10:25
- Localização: Leiria (Batalha)
por 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

-
- Mensagens: 206
- Registado: Quarta Jan 04, 2006 21:29
- Localização: Lisboa/Proença
por 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;
-

vala
- Membro de Ouro

-
- Mensagens: 724
- Registado: Segunda Nov 19, 2007 10:25
- Localização: Leiria (Batalha)
por 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

-
- Mensagens: 3257
- Registado: Sábado Abr 06, 2002 18:28
- Localização: Coimbra
-
por 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

-
- Mensagens: 3257
- Registado: Sábado Abr 06, 2002 18:28
- Localização: Coimbra
-
por vala » Quarta Fev 20, 2008 16:46
so esta mal identado porque qando coipiei ficou logo assim
-

vala
- Membro de Ouro

-
- Mensagens: 724
- Registado: Segunda Nov 19, 2007 10:25
- Localização: Leiria (Batalha)
por vala » Quarta Fev 20, 2008 16:48
mas da erro no reset
-

vala
- Membro de Ouro

-
- Mensagens: 724
- Registado: Segunda Nov 19, 2007 10:25
- Localização: Leiria (Batalha)
por 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

-
- Mensagens: 206
- Registado: Quarta Jan 04, 2006 21:29
- Localização: Lisboa/Proença
por 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

-
- Mensagens: 136
- Registado: Segunda Out 06, 2003 18:28
- Localização: Lisboa ou Madeira, conforme o mês do ano
-
por 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

-
alfatek
- 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