Iniciando em JDBC

9 respostas
Flasoft

O pessoal eu to programando em java já faz ± 1 ano
mas vou fazer meu 1º projeto usando banco… já sei bastante coisa de java mas de banco só aprendi a fazer a conexão, efetuar consultas e inserir dados…

este foi um código q fiz só pra testar

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class TesteBanco {

	public static void main(String[] args) {
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

			String filename = "C:/Clientes.mdb";
			String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
			database+= filename.trim() + ";DriverID=22;READONLY=true}"; // add on to the end 

			Connection con = DriverManager.getConnection( database ,"","");
			
			Statement s = con.createStatement();

			s.execute("INSERT INTO " + 
					      "TbClientes" +
					         "(Nome, Endereço, Bairro, Cidade, Estado, Telefone) "+
					      "VALUES"+
					         "('Eu', 'Rua dos Tal, 00', 'Vila Tal', 'Araraquara', 'SP', '([telefone removido]')");
			
			s.close();
			con.close();
		}
		catch (Exception e) {
			System.out.println("Error: " + e);
		}	
	}
}

minha duvida é:
Eu vou trabalhar com swing. Toda vez que o usuario for inserir, alterar, excluir, consultar, etc… vou ter que me conectar, executar o que tiver q executar e depois desconectar? qual o método correto de fazer isto? crio uma função conectar e outra desconetar? Eu queria uma ajuda na extrutura q vcs usam…

Valeu pessoal

9 Respostas

Pedrosa

De uma olhada nesse tutorial:

http://www.guj.com.br/java.tutorial.artigo.115.1.guj

T

A resposta é “depende”.

Como a conexão leva algum tempo, a primeira reação é tentar deixar uma conexão sempre aberta.
Mas isso “mata o banco” se houver muitos clientes simultâneos (além disso sai caro porque normalmente os bancos pagos costumavam ser cobrados por número de conexões. Hoje em dia parece que muitos deles são cobrados por CPUs, mas ainda há instalações de bancos mais antigas que são cobradas por conexões.)
Abrir e fechar a toda hora é o recomendado se você tiver um “connection pool”. Se você programava em VB/ASP sabe que isso vinha “de graça” com o ADO; no caso do Java é necessário usar um “connection pool”. Alguns exemplos: C3P0 - (http://www.mchange.com/projects/c3p0/index.html), DBCP (http://jakarta.apache.org/commons/dbcp/)

Flasoft

Pedrosa li o tutorial e achei muito interessante nunca tinha pensado em fazer isso. Legal msm, tenha certeza q vou testar neste projeto. Mas minha duvida de como fazer a conexão ainda continua

Thingol o banco q vou utilizar é o do access por ter facil locomoção, se q não é dos melhores mas já ta pago e é sem limite em tudo (é claro, excluindo o tamanho 4Gb), programei sim 4 anos em VB e era baba fazer conexão(deixava uma aberta e já iria fazendo todas as modificações e atualizando), eu queria lhe perguntar se o recurso é o hibernate pq olhei suas paginas e como estou começando a mexer com bd em java não entendi nada. Se for e vc me falar q é o mais apropriado vou procurar aprender já, pois vi umas coisas legais no
www.java2s.com

+ duvidas: Percebi que se aberto a conexão e eu só alterando a base ele não atualiza a base até eu fechar a conexão. Para mim isso é ruim pois meu projeto é multi usuario, então tem como atualizar a base sem fechar a conexão? E é apropriado utilizar isto?

valeu pessoal

T

Access “multi-usuário” é um perigo.
Já houve projetos aqui na firma que inventaram de usar o Access como um banco de dados “multi-usuário” - isso fez rolar cabeças de gerentes aqui porque ele não é exatamente muito confiável para isso.
Se puder usar qualquer outro banco (Derby, HSQLDB, MySQL, SQL Server Express, Oracle Express etc.) use. Mas não Access como “multi-usuário”.

Flasoft

Tudo bem, eu msm já tive alguns problemas…
Posso naturalmente trocar para MySql

mas e?

e?

Vc poderia me ajudar?

[]s

Daniel_Quirino_Olive

Flasoft:
Tudo bem, eu msm já tive alguns problemas…
Posso naturalmente trocar para MySql

mas e?

Não. Hibernate é um “carinha” responsável por traduzir suas entidades do banco de dados para objetos Java automaGicamente e vice-versa. O nome que se dá para “carinhas” que fazem este trabalho é de “mapeadores objeto-relacional” (ORM).

Flasoft:

e?

Vc poderia me ajudar?

[]s

Provavelmente sua conexão está com o mecanismo de auto-commiting desligado. Para tanto, tente o seguinte:

Connection conn = // obtendo sua conexão com o banco aqui...
conn.setAutoCommit(true);
// o resto do seu código...
Flasoft

era isto msm (setAutoCommit(true))
agora esta atualizando sempre…

o q vcs me indicam fazer? deixar a conexão sempre aberta e só ir atualizando a base (sendo q a aplicação é de multi-usuario), abrir e fechar a cada clique, ou estudar hibernate primeiro q irá mudar minha maneiera de pensar (sei q é uma forma de “ligar/endereçar variaveis” [nunca vi só ouvi falar] aos campos do banco e trabalher com eles sem precisar de sql, mas não sei se isto ajuda na velocidade ou legibilidade de meu código)?

Marcel_Horner

Vale lembrar que com o setAutoCommit(true) vc nao tem a possibilidade de executar um rollback no banco. Caso vc precise realizar uma transacao voce pode deixar o seu codigo como estava antes e chamar conn.commit() para que as alteracoes no banco facam efeito e se tornem permanentes ou conn.rollback() caso deseje desfazer as operacoes realizadas utilizando a conexao conn.

Eu particularmente faria conectando e desconectando a cada acesso. Mas como jah foi dito anteriormente depende de cada caso. A meu ver a unica desvantagem de utilizar esta abordagem poderia ser uma demora maior na execucao das operacoes de banco. Se a demora eh significativa dependera do seu ambiente e dos requisitos para o seu sistema.

Vc pode tentar realizar alguns testes para medir quanto tempo o seu sistema leva para conectar e desconectar do banco.

Flasoft

Mas como meu banco esta vazio isto interferiria na velocidade de conexão? Quando o banco estiver cheio a velocidade de conexão não seria menor?

O que vou fazer é um controle de oficio…
Cada oficio q chega na empresa vai ser cadastrado neste sistema…
E o sistema vai enviar uma resposta. Que tbm dv ser arquivada…

para cada maquina com o sistema aberto vai ser gerado um registro q conta quantas horas no mes o sistema ficou aberto(então quando o sistema abrir ele cria um registro marcando a entrada e a saida ele atualisa de cinco em cinco minutos para q se a força cair ou um ctrl + alt +del não corrompa meu banco)…
Então o acesso ao banco teria q ser rapido.
acho q vou deixar a conexão aberta então… e utilizar o setAutoCommit(true)

Criado 6 de julho de 2006
Ultima resposta 6 de jul. de 2006
Respostas 9
Participantes 5