Muitos problemas

Quer ajudar mas está com prequiça de ler tudo, não precisa, leia somente o ultimo post!

Olá sou novo no fórum de vocês, mas estou com problemas e espero que vocês possam me ajudar.

Apesar de já saber um pouco de C#, estou aprendendo java a muito pouco tempo, e temo que essa transição está sendo um pouco traumatica, já de cara tenho que migrar um sistema complexo de C# para Java.

Bom, vocês não sabem a quantidade de dúvidas que eu tenho, mas vou começar com uma simples:

Como eu verifico a existência de um arquivo na máquina do usuário?

import java.io.*;
...
String s = "C:\AUTOEXEC.BAT";
File f = new File (s);
if (f.exists()) {
    System.out.println ("O arquivo autoexec.bat foi encontrado.");
}

Muito obrigado.

Se me permitem, tenho mais uma dúvida, tenho que criar um tipo de tabela aonde eu posso adicionar dados para depois salvar em um documento XML.

Tentei fazer algo parecido com o ResultSet, mas não consegui adicionar novas linhas manualmente com ele, existe como?

Pesquisei um pouco, descobri a JTable e a XMLFormatter, mas não entendi seus funcionamentos muito bem, se alguém estiver disposto a dar um leve explicada, ou indicar um link/artigo, ficaria agradecido.

Eu acho que você quer procurar um arquivo?

Cabei de cria ve se serve.
Mas no nome do arquivo é Case Sensetive
Se você quiser achar o arquivo IExplorer não achara com IEXplorer

package mark;

import java.io.File;

public class Scan {
	private String criteria;
	private boolean has;

	public Scan(String initialDir, String criteria) {
		this.criteria = criteria;
		File f = new File(initialDir);
		if (f.isDirectory()) {
			try {
				scan(f.listFiles());
			} catch (InterruptException e) {
				System.out.println(e.count);
			}
		}
		System.out.println(has);
	}

	public static void main(String[] args) {
		new Scan("C:\", "AUTOEXEC");
	}

	private void scan(File[] f) throws InterruptException {
		try {
			for (File file : f) {
				if (file.isDirectory())
					scan(file.listFiles());
				else {
					if (file.getAbsoluteFile().getName().contains(criteria)) {
						has = true;
						throw new InterruptException();
					}
				}
			}
		} catch (InterruptException e) {
			e.count++;
			throw e;
		}
	}

	private class InterruptException extends Exception {

		/**
		 * 
		 */
		private static final long serialVersionUID = 3957446492695001852L;
		public int count = 0;
	}
}

JTable é um componente Swing que dividi como se fosse uma planilha do Excel

Eu não entendi oque você quis fazer com o Xml, você pode guardar em Sets depois gravar em xml com um código que você fez.

A ideia do código é mais ou menos a seguinte:

Eu procuro o arquivo tal, se ele existir eu deleto e crio um novo.

Esse arquivo é um arquivo XML, logo eu criaria uma tabela com dados e com esse dados criaria um novo documento XML, entendeu?

[quote=Figuera]Muito obrigado.

Se me permitem, tenho mais uma dúvida, tenho que criar um tipo de tabela aonde eu posso adicionar dados para depois salvar em um documento XML.

Tentei fazer algo parecido com o ResultSet, mas não consegui adicionar novas linhas manualmente com ele, existe como?

Pesquisei um pouco, descobri a JTable e a XMLFormatter, mas não entendi seus funcionamentos muito bem, se alguém estiver disposto a dar um leve explicada, ou indicar um link/artigo, ficaria agradecido.[/quote]

Olá. Não sei se é tarde …

O ResultSet do java é muito diferente do ResultSet do ADO.NET que você está acostumado.
Para conseguir converter este código c# em Java, você somente precisa entender a regra de negócio e reescrever praticamente do zero o código.

No seu caso, você vai precisar de uma Classe para representar estes dados que contém no ResultSet, bom, ela tipo substitui o seu “row” lá do ADO. E no final, para criar ou recriar o seu xml, você faz um parse da collection de beans (neste caso, seria tipo o resultset do ADO que está acostumado) para XML. Vi um artigo uma vez sobre uma lib que fazia isso sozinha, mas não consegui achar o link. Aqui talvez você ache alguma coisa … http://www.guj.com.br/artigos.jsp#87031

Cara, não tem segredo. Você só precisa se “desamarrar” do ADO …

Bom, espero ter ajudado.

sucesso!
Roger Leite

Bom eu só pude voltar a ver isso agora, e ajudou muito sim.

Mas devo confessar que quando li o que você disse fiquei muito confuso, mas depois de ler os artigos tudo começou a ficar mais claro, e gostei muito, muito mais inteligente que o ADO.

Já desculpando pelo post duplo…

Estou com uma enorme dificuldade com Enums.
Primeiro queria saber se tem como eu determinar valores de tipos de variaveis diferentes?

Algo como:

        public Enum Colunas{
                 string("texto"), Int(012);
                     /...
        }

Quando vou criar a classe para representar os dados, posso, considerando que são muitas colunas, declara-las em uma enum?

Ao invéz de :

Class Pessoas{ private String nome; private String email; private Telefone foneComercial; }
Isso:

Class Pessoas{ public enum pessoas{ nome, email, foneComercial; } }

Tentei mas não consegui.

E a ultima pergunta, tem com eu modificar o corpo do enum depois de ter o declarado como variavel?

         Public enum nome { /*bla bla bla*\ }
         nome enumnome;

Tem como eu modificar o corpo enumnome, sem tem que modificar a nome?

Bom se alguem souber uma das resposta a minha pergunta anterior, eu ainda estou com duvidas, mas agora tenho uma mais simples:

File arquivo = new File("src/manutencao/banco.xml");
		if(arquivo.exists()){
			FileReader Leitor = new FileReader(arquivo);
		}

Como, e porque, o código acima pode retornar a excessão FileNotFoundException, na linha do FileReader?

[quote=Figuera]Bom se alguem souber uma das resposta a minha pergunta anterior, eu ainda estou com duvidas, mas agora tenho uma mais simples:

File arquivo = new File("src/manutencao/banco.xml");
		if(arquivo.exists()){
			FileReader Leitor = new FileReader(arquivo);
		}

Como, e porque, o código acima pode retornar a excessão FileNotFoundException, na linha do FileReader?[/quote]

Bom, no javadoc não fala nenhum motivo especifico porque ele joga a exception, mas seguindo a lógica, o FileReader “só” permite você ler arquivos que existam, logo se passar um arquivo que não existe ou até mesmo um diretório (que é requesentado por File também) ele jogará um FileNotFoundException.

Cara, sobre o seu problema acima, não entendi porque quis aplicar enum. Provavelmente você está confundindo conceitos ai. Pra você conseguir resolver este problema, esqueça o modelo “relacional” do ADO .Net. O que tem pra fazer parece ser simples, basicamente seguindo estes passos:

  • Criar uma classe que contém os dados que deseja armazenar no xml. Por exemplo, uma classe Pessoa com nome, idade, endereço igual citou acima.
  • Colocar num List todas as Pessoas que deseja guardar no xml.
  • Criar uma classe que grave este List em xml. Esta mesma classe pode ter o processo “reverso” também, que seria ler o xml e retornar o List de Pessoas.

Com o link dos artigos de xml passado acima, acho que você consegue executar estes passos.

boa sorte,

Roger Leite

Obrigado Roger você ainda me responde =D.

Sim, eu queria usar uma enum por nenhum motivo especial, acho que ficaria esteticamente melhor que conseguisse colocar em uma enum, mas se não funciona não tem problema.

O problema é: O arquivo existe, como pode ser confirmado pelo – if(arquivo.exists()) --, eu fiquei um bom tempo tentando formas alternativas de chamar o arquivo, e bem ele existe mas ainda sim o Reder lança a exception

O FileReader está “throwando” um FileNotFoundException ?
Cara, se puder, posta a sua classe e o stackTrace da exception.
Acredito que assim fica mais fácil de ajudar.

sucesso! Estamos ai pra ajudar, ou tentar pelo menos né! :smiley:

Roger Leite

Bom eu meio que já arrumei esse problema, mudando para o JDOM, mas ainda é bom aprender a usar o XStream, quanto a esse código eu tenho uma pergunta, porque a necessidade do – throws IOException, ClassNotFoundException --, ou do try/catch?

[code]class ClsBancoxml{
public String Provider;
public String Datasource;
public String User;
public String Pwd;
public int DBType;
}

public class teste{
public static void main( String[] args) throws IOException, ClassNotFoundException{

	 File arquivo = new File("src/manutencao/banco.xml");  
	 FileReader Leitor = new FileReader(arquivo);  
	 XStream xml = new XStream();
	 
	 xml.alias("banco", ClsBancoxml.class);
	 
	 ObjectInputStream in = xml.createObjectInputStream(Leitor);
	 
	 ClsBancoXML banco = (ClsBancoXML) in.readObject();
	 
	 System.out.println(in.readObject());
}

}[/code]

Ele retorna esse erro:

Exception in thread "main" java.lang.IllegalArgumentException: XPP3 pull parser library not present. Specify another driver. For example: new XStream(new DomDriver()) at com.thoughtworks.xstream.io.xml.XppDriver.loadLibrary(XppDriver.java:42) at com.thoughtworks.xstream.io.xml.XppDriver.createReader(XppDriver.java:29) at com.thoughtworks.xstream.XStream.createObjectInputStream(XStream.java:1294) at manutencao.teste.main(teste.java:38)

Mas meu problema é agora é o seguinte, tenho a enum:

public enum idDbTypeEnum { idDBNone(0), idDBOracle(1), idDBSQLServer(2), idDBInformix(3), idDBSybase(4), idDBIbmDB2(5), idDBAccess(6), idDBInterbase(7), idDBPostgreSQL(8); }

e preciso criar um set ± assim:

private idDbTypeEnum gobjDatabaseType;
public void setDataType(idDbTypeEnum gobjDatabaseType) {
			this.gobjDatabaseType = gobjDatabaseType;
			switch(gobjDatabaseType){
				case idDBOracle:
                                .....
                                .....
                                .....}

só que quando for chamar o set eu não terei um valor (idDbTypeEnum) terei o valor númerico (int) correspondente, entendeu?

Algo assim: setDataType(1)

Preciso converter esse valor número 1, para o valor enum idDbOracle, como eu faço isso?

Já arrumei o problema da enum acima, mas se alguém ainda estiver disposto a me ajudar , tenho mais um problema:

Preciso de drivers de conexão para Oracle, SQLServer, Informix, Sybase, IbmDB2, Access, Interbase, PostgreSQL, sendo prioritários o Oracle, o SQLSERVER e o Postgre.

Achei o JDBC que pelo que eu entendi faz conexão com vários bancos, e o JTDS para SQLSERVER e Sybase, minha principal dúvida é: o JDBC faz conexão com quais bancos? preciso de um plugin para cada um deles?

PS: Ah! - e como eu checo se a Conexão está aberta?

Cada fabricante de banco de dados possui um driver jdbc, se você realmente vai usar todos esses bancos de dados, sugiro que use alguma ferramenta de persistência como Hibernate e JPA para ter independência de SGBD.

O que viriam a ser essas ferramentas de persistência?

PS: então o proprio JTDS não passa de um API do JDBC?