Posts Tagged ‘Java’

Definindo Role de Conexão ao Banco de Dados com JDBC

sexta-feira, abril 9th, 2010

Uma rapidinha, pois demorei a encontrar:

Para definir a role na conexão com o Banco de Dados utilize um Properties

Properties prop = new Properties();
prop.put("user", "login_bd");
prop.put("password", "senha_bd");
prop.put("roleName", "role_bd");

Connection conn = DriverManager.getConnection("jdbc:firebirdsql:127.0.01:banco", prop);

conn.setAutoCommit(false);            
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

Simples assim! Note que roleName é case sensitive eu apanhei um monte até descobrir.

Hibernate sem XML (ufa!)

quarta-feira, abril 22nd, 2009

Opa, eu nunca me dei bem com XML… não sei se é trauma da época que trabalhava com html(abre tag, fecha tag, abre tag…) ou se é algum outro tipo de bloqueio.

E no caso usando hibernate+Annotations achei muito chato ficar alterando este XML para mapear as classes. Além de engessar caso eu queira configurar um nova conexão em tempo de execução.

Isto é mais um exemplo… futuramente (eu ando prometendo muitas coisas :| ) posto aqui um projeto utilizando ele.

No caso aqui eu uso duas classes Banco e BancoProjeto, como são vários projetos herdo e personalizo de acordo com a necessidade de cada projeto.

Primeira classe: Banco

package br.com.theos.admin.database;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

public class Banco {

    protected static Banco instancia;

    private Session session;
    private Transaction transaction;
    private AnnotationConfiguration cfg;

    public synchronized static Banco getInstancia() {
        if (instancia == null) {
            instancia = new Banco();
        }
        return instancia;
    }

    public Banco() {
    	super();

    	cfg = new AnnotationConfiguration();
    }

    public void setProperty(String key, String value) {
        	cfg.setProperty(key, value);
    }

    @SuppressWarnings("unchecked")
    public void addMappedClass(Class persistenceClass) {
    	cfg.addAnnotatedClass(persistenceClass);
    }  

    public Session getSession() {
    	if (session == null) {
    		session = cfg.buildSessionFactory().openSession();
    	}

    	return session;
    }

    public void startTransaction() {
    	transaction = session.beginTransaction();
    }

    public void commitTransaction() {
    	transaction.commit();
    }

    public void rollbackTransaction() {
    	transaction.rollback();
    }
}

Ela apenas está preparada para receber as configurações e serviços básicos. É necessário herdá-la para que seja possível a conexão.

Segunda classe: BancoProjeto

package br.com.theos.server.database;

import br.com.theos.admin.database.Banco;
import br.com.theos.server.database.entities.Class1;
import br.com.theos.server.database.entities.Class2;
import br.com.theos.server.database.entities.Class3;

public class BancoProjeto extends Banco {

	public BancoProjeto(String database) {
		super();

		loadBuild(database);
		loadMappedClass();
	}

	public synchronized static Banco getInstancia(String database) {
        	if (instancia == null) {
            		instancia = new BancoProjeto(database);
        	}       

        	return instancia;
    	}

	private void loadBuild(String database) {
		setProperty("hibernate.dialect", "org.hibernate.dialect.FirebirdDialect");
		setProperty("hibernate.connection.driver_class", "org.firebirdsql.jdbc.FBDriver");
		setProperty("hibernate.connection.url", "jdbc:firebirdsql:localhost/3050:"+database);
		setProperty("hibernate.connection.username", "sysdba");
		setProperty("hibernate.connection.password", "masterkey");
		setProperty("hibernate.show_sql", "false");
                /*
                 * Para apagar e recriar: "create-drop"
                 * Para não fazer nada:  "validate"
                 * Para somente atualizar: "update"
                 */
		setProperty("hibernate.hbm2ddl.auto", "validate");
	}

	private void loadMappedClass() {
		addMappedClass(Class1.class);
		addMappedClass(Class2.class);
		addMappedClass(Class3.class);
	}
}

Pronto! Agora abandonamos o persistence.xml e o hibernate.cfg.xml.

Isto vai dar uma dinamicidade melhor ao seu projeto.

Criar base de dados do Firebird+Java

quarta-feira, abril 22nd, 2009

Opa, precisei em tempo de execução criar uma base firebird com java.

Pesquisei, e claro o Google nos trouxe grandes informações.

Mas vou disponibilizar uma classe prontinha para pesquisa, ou utilização:

package br.com.theos.server.database;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

import org.firebirdsql.management.FBManager;

public class CreateDatabase {

	private String path;
	private String sep;

	public CreateDatabase() {
		super();

		Execute("teste");
	}

	private String getPath() { //Caminho do aliases.conf do firebird
		if (path == "") {
                         //Separador padrão do sistema operacional
			sep = System.getProperty("file.separator");

			StringBuilder pBuilder = new StringBuilder();

                        //Caminho padrão do diretório de instalação dos programas
			pBuilder.append(System.getenv("programfiles"));
			pBuilder.append(sep);
			pBuilder.append("Firebird");
			pBuilder.append(sep);
			pBuilder.append("Firebird_1_5"); //No meu caso usamos ainda o Firebird 1.5
			pBuilder.append(sep);
			pBuilder.append("aliases.conf");
                        path = pBuilder.toString();
		}

		return path;
	}

	//Para quem usa Alias, adicionar ao arquivo o alias da nova base
	private void addAlias(String database) throws FileNotFoundException {		

		File f = new File(getPath());

		if (f.exists()) {
			try {
				FileWriter fw = new FileWriter(getPath(),true);
				BufferedWriter bout = new BufferedWriter(fw);

				bout.write("\n"+database + " = "
                                         +System.getProperty("user.dir")+sep+
                                         database+".fdb"+"\n");
				bout.close();
				fw.close();
			} catch (IOException e) {
				// TODO Gerar log
				e.printStackTrace();
			}
		}
		else {
			throw new FileNotFoundException(getPath());
		}
	}

	//Database é o nome da base, será criada no diretório da aplicação
	public void Execute(String database) {
		try {
			addAlias(database);

			FBManager fb = new FBManager();
			fb.setServer("127.0.0.1");
			fb.setPort(3050);		

			fb.start();
			fb.createDatabase(database, "sysdba", "masterkey");
			fb.stop();

		} catch (FileNotFoundException fe) {
			// TODO Auto-generated catch block
			fe.printStackTrace();
		}
		catch(Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Pronto! Simples assim! :D

Não se esquecer da JDBC do Firebrid adicionado ao projeto.