conexÃo com o banco

3 respostas
PorkaSolta_CHAPOLIM

AMIGOS,
GOSTARIA DE SABER SE EU DEVO CONECTAR COM O BANCO A CADA CLASSE USANDO SENHA E LOGIN AUTOMATICO OU SE EU CONECTO EM UMA CLASSE PRINCIPAL (COMO NORMALMENTE DEVEMOS FAZER?). HJ EU FAÇO A CONEXÃO EM CADA CLASSE COM SENHA E LOGIN DEFINIDOS

3 Respostas

thiago.correa

Você pode criar uma classe que cuida dessa parte de conexões com o banco. Ao invés de toda vez que for usar o banco, ficar passando senha e login

P.S.: Evite escrever em caixa alta, dá a impressão que você está gritando!

PorkaSolta_CHAPOLIM

A dica do ps foi a melhor hehehe, mas foi penas para facilitar a leitura… meu monitor é 15’’ usando 1024x768. Obrigado pelas dicas.

rafael.espiritosanto

Olha, não sei se vai ser de ajuda mas eu faço assim.

package util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.servlet.ServletContext;

public class UtilBd {
	
	private Properties prop;
	private File arquivo;
	private FileInputStream fis;
	
	private String urlBd;
	private String usuarioBd;
	private String senhaBd;
	
	protected Connection con;
	protected PreparedStatement ps;
	protected ResultSet res;
	
	private int numeroConexoes;
	
	public UtilBd(ServletContext context) {
		String caminho = context.getRealPath("/WEB-INF/UtilBd.properties");
		arquivo = new File(caminho);
		
		try {
			fis = new FileInputStream(caminho);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		prop = new Properties();
		
		try {
			prop.load(fis);
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		try {
			fis.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		this.urlBd = prop.getProperty("UtilBd.urlBd");
		this.usuarioBd = prop.getProperty("UtilBd.usuarioBd");
		this.senhaBd = prop.getProperty("UtilBd.senhaBd");
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	protected void conecta() {
		
		try {
			con = DriverManager.getConnection(urlBd, usuarioBd, senhaBd);
			numeroConexoes++;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	protected void desconecta() {
		try {
			ps.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			con.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		numeroConexoes--;
	}
	
	protected int numeroDeConexoes() {
		return numeroConexoes;
	}
}

Essa é uma classe genérica pra eu não ter que ficar adicionando o driver
e coisa tal. Eu discuto com um colega se não seria melhor usar um Listener pra carregar o driver e tal....

A classe específica eu uso assim.
package usuario;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.ServletContext;

import util.UtilBd;

public class UsuarioBd extends UtilBd {
	
	public UsuarioBd(ServletContext context) {
		super(context);
	}
	
	public UsuarioBean efetuarLogin(String loginUsuario, String senhaUsuario) {
		
		this.conecta();
		try {
			ps = con.prepareStatement("SELECT * FROM USUARIO WHERE LOGINUSUARIO = ? AND SENHAUSUARIO = MD5(?)");
			ps.setString(1, loginUsuario);
			ps.setString(2, senhaUsuario);
			res = ps.executeQuery();
			
			if(res.next()) {
				UsuarioBean usuario = new UsuarioBean();
				usuario.setIdUsuario(res.getInt("idUsuario"));
				usuario.setEmailUsuario(res.getString("emailUsuario"));
				usuario.setLoginUsuario(res.getString("loginUsuario"));
				usuario.setNomeUsuario(res.getString("nomeUsuario"));
				usuario.setSenhaUsuario(res.getString("senhaUsuario"));
				
				return usuario;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} finally {
			this.desconecta();
		}
		return null;
	}
	
	public boolean inserirUsuario(UsuarioBean usuario) {
		this.conecta();
		try {
			ps = con.prepareStatement("INSERT INTO USUARIO (IDUSUARIO, EMAILUSUARIO, LOGINUSUARIO, NOMEUSUARIO, SENHAUSUARIO) VALUES(NULL, ?, ?, ?, MD5(?))");
			ps.setString(1, usuario.getEmailUsuario());
			ps.setString(2, usuario.getLoginUsuario());
			ps.setString(3, usuario.getNomeUsuario());
			ps.setString(4, usuario.getSenhaUsuario());
			ps.executeUpdate();
			
			return true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		} finally {
			this.desconecta();
		}
		//return false;
	}
	
	public boolean alterarUsuario(UsuarioBean usuario) {
		this.conecta();
		try {
			ps = con.prepareStatement("UPDATE USUARIO SET EMAILUSUARIO = ?, NOMEUSUARIO = ? WHERE IDUSUARIO = ?");
			ps.setString(1, usuario.getEmailUsuario());
			ps.setString(2, usuario.getNomeUsuario());
			ps.setInt(3, usuario.getIdUsuario());
			ps.executeUpdate();
			
			return true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		} finally {
			this.desconecta();
		}
		//return true;
	}
	
	public boolean alterarSenhaUsuario(UsuarioBean usuario) {
		this.conecta();
		try {
			ps = con.prepareStatement("UPDATE USUARIO SET SENHAUSUARIO = MD5(?) WHERE IDUSUARIO = ?");
			ps.setString(1, usuario.getSenhaUsuario());
			ps.setInt(2, usuario.getIdUsuario());
			ps.executeUpdate();
			
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			this.desconecta();
		}
		
	}
	
	public boolean excluirUsuario(int idUsuario) {
		this.conecta();
		try {
			ps = con.prepareStatement("DELETE FROM USUARIO WHERE IDUSUARIO = ?");
			ps.setInt(1, idUsuario);
			ps.executeUpdate();
			
			return true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		} finally {
			this.desconecta();
		}
	}
	
	public Collection<UsuarioBean> listarUsuario() {
		Collection<UsuarioBean> usuarios = new ArrayList<UsuarioBean>();
		this.conecta();
		try {
			ps = con.prepareStatement("SELECT * FROM USUARIO");
			res = ps.executeQuery();
			while(res.next()) {
				UsuarioBean usuario = new UsuarioBean();
				usuario.setEmailUsuario(res.getString("IDUSUARIO"));
				usuario.setIdUsuario(res.getInt("IDUSUARIO"));
				usuario.setLoginUsuario(res.getString("LOGINUSUARIO"));
				usuario.setNomeUsuario(res.getString("NOMEUSUARIO"));
				usuario.setSenhaUsuario(res.getString("SENHAUSUARIO"));
				
				usuarios.add(usuario);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			this.desconecta();
		}
		return usuarios;
	}
	
	public Collection<UsuarioBean> listarUsuario(int quantidade, int inicio) {
		Collection<UsuarioBean> usuarios = new ArrayList<UsuarioBean>();
		this.conecta();
		try {
			ps = con.prepareStatement("SELECT * FROM USUARIO LIMIT ? OFFSET ?;");
			ps.setInt(1, quantidade);
			ps.setInt(2, inicio);
			res = ps.executeQuery();
			while(res.next()) {
				UsuarioBean usuario = new UsuarioBean();
				usuario.setEmailUsuario(res.getString("IDUSUARIO"));
				usuario.setIdUsuario(res.getInt("IDUSUARIO"));
				usuario.setLoginUsuario(res.getString("LOGINUSUARIO"));
				usuario.setNomeUsuario(res.getString("NOMEUSUARIO"));
				usuario.setSenhaUsuario(res.getString("SENHAUSUARIO"));
				
				usuarios.add(usuario);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			this.desconecta();
		}
		return usuarios;
	}
	
	public UsuarioBean selecionarUsuario(int idUsuario) {
		this.conecta();
		try {
			ps = con.prepareStatement("SELECT * FROM USUARIO WHERE IDUSUARIO = ?");
			ps.setInt(1, idUsuario);
			res = ps.executeQuery();
			if(res.next()) {
				UsuarioBean usuario = new UsuarioBean();
				usuario.setEmailUsuario(res.getString("IDUSUARIO"));
				usuario.setIdUsuario(res.getInt("IDUSUARIO"));
				usuario.setLoginUsuario(res.getString("LOGINUSUARIO"));
				usuario.setNomeUsuario(res.getString("NOMEUSUARIO"));
				usuario.setSenhaUsuario(res.getString("SENHAUSUARIO"));
				
				return usuario;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} finally {
			this.desconecta();
		}
		return null;
	}

	public boolean verificaSenha(String senhaAntiga) {
		this.conecta();
		try {
			ps = con.prepareStatement("SELECT * FROM USUARIO WHERE SENHAUSUARIO = MD5(?)");
			ps.setString(1, senhaAntiga);
			
			res = ps.executeQuery();
			
			if(res.next()) {
				return true;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			this.desconecta();
		}
		return false;
	}
}

Tem um erro aí. eu faço o desconecta no finally. O problema é que quando
no try eu encontro um return ele ignora todo o código, inclusive o finally. (Será? Eu não tenho certeza)

Daí eu uso
package util;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import usuario.UsuarioBd;
import usuario.UsuarioBean;

/**
 * Servlet implementation class for Servlet: LoginServlet
 *
 */
 public class LoginServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	 
	private ServletContext context;
	public LoginServlet() {
		super();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.getRequestDispatcher("./login.jsp").forward(request, response);
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
		HttpSession session = request.getSession();
		
		String loginUsuario = request.getParameter("loginUsuario");
		String senhaUsuario = request.getParameter("senhaUsuario");
		
		UsuarioBd usuarioBd = new UsuarioBd(context);
		UsuarioBean usuarioLogado = usuarioBd.efetuarLogin(loginUsuario, senhaUsuario);
		
		if(usuarioLogado != null) {
			session.setAttribute("usuarioLogado", usuarioLogado);
			session.setAttribute("msg", "Seja bem vindo " + usuarioLogado.getNomeUsuario());
			response.sendRedirect("listarUsuario");
		} else {
			session.setAttribute("msg", "Usuário/Senha inválidos");
			doGet(request, response);
		}
	}   	  	  
	
	/* (non-Javadoc)
	 * @see javax.servlet.GenericServlet#init()
	 */
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		context = config.getServletContext();
	}   
}

Eu uso o context pra poder ter acesso ao arquivo que vai conter a url, senha e usuário do banco. Espero ter ajudado
Abraço

Criado 26 de dezembro de 2006
Ultima resposta 27 de dez. de 2006
Respostas 3
Participantes 3