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
conexÃo com o banco
3 Respostas
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!
A dica do ps foi a melhor hehehe, mas foi penas para facilitar a leitura… meu monitor é 15’’ usando 1024x768. Obrigado pelas dicas.
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....
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)
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