Duvida - qual a melhor maneira de alterar dados, incluir e remover um usuário?

5 respostas
R

Pessoal,

Tenho duas classes:

package com.tcc;

public class Usuario {
	
	private String codigo = "";
	private String nome = "";
	private String senha = "";
	private String ultimoacesso = "";
	
	public Usuario(){}
	
 	public Usuario(String nome, String senha, String ultimoAcesso){
		this.nome = nome;
		this.senha = senha;
		this.ultimoacesso = ultimoAcesso;
	}	
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public String toString() {   
	    return this.nome + " : " + this.senha;   
	}

	public String getUltimoacesso() {
		return ultimoacesso;
	}

	public void setUltimoacesso(String ultimoacesso) {
		this.ultimoacesso = ultimoacesso;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}	
}
package com.tcc;

import java.sql.ResultSet;
import java.sql.SQLException;

public class UsuarioAcao {
	
	private String codigo = "";
	private String nome = "";
	private String senha = "";
	private String ultimoacesso = "";	
	
	public UsuarioAcao(){}
	
 	// Insere um novo usuário
	public int getIncluir() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
		
		int result = 0;
		
		if (getNome() !="" && getSenha() !=""){
			String SQL = "insert into usuarios (nome, senha) values  " +
				"( '" + getNome() + "' , '" + getSenha() +"')";
			ConectaBanco cb = new ConectaBanco();
			result = cb.ExecutaIUD(SQL);
			cb.FechaConexaoBD();
			setBuscaUltimoacesso(getNome());
		}
		
		return result;		
	}
	
	// Altera dados do usuário
	public int getAlterar() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
		
		int result = 0;
		
		if (getNome() !="" && getSenha() !="" && getCodigo() !=""){
			String SQL = "update usuarios set nome = '" + getNome() + "' , senha = '" + getSenha() +
				" where codigo = '" + getCodigo() + "')";
			ConectaBanco cb = new ConectaBanco();
			result = cb.ExecutaIUD(SQL);
			cb.FechaConexaoBD();
		}
		
		return result;
		
	}
	
	// Deletar usuário
	public int getDeletar() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
		
		int result = 0;
		
		if (getCodigo() !=""){
			String SQL = "delete usuarios where codigo = " + getCodigo() + ")";
			ConectaBanco cb = new ConectaBanco();
			result = cb.ExecutaIUD(SQL);
			cb.FechaConexaoBD();
		}
		
		return result;
		
	}	
	
	// Método para buscar o getdate() do banco de dados e definir a variavel ultimoAcesso.
	private void setBuscaUltimoacesso(String Usuario) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		String ultimoAcesso = "";
		ConectaBanco cb = new ConectaBanco();
		ResultSet rs = cb.ExecutaSelect("select UltimoAcesso from usuarios u where u.nome = '" + getNome() + "'");		
		rs.next();
		if (rs!= null){
			ultimoAcesso = rs.getString("UltimoAcesso");
			setUltimoacesso(ultimoAcesso);
		}
		cb.FechaConexaoBD();
	}	

	private String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	private String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getUltimoacesso() {
		return ultimoacesso;
	}

	public void setUltimoacesso(String ultimoacesso) {
		this.ultimoacesso = ultimoacesso;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

}

Moral da história, na classe UsuarioAcao eu pretendo realizar as atividades de incluir, alterar e excluir um usuário.
Dúvida, nao seria o caso de passar o objeto usuário para a classe UsuarioAcao ? tá certo oq estou fazendo ?

Obrigado !

5 Respostas

R

A maneira mais OO seria assim ?????

public int getAlterar(Usuario usu) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
		
		int result = 0;
		
		if (usu.getNome() !="" && usu.getSenha() !="" && usu.getCodigo() !=""){
			String SQL = "update usuarios set nome = '" + usu.getNome() + "' , senha = '" + usu.getSenha() +
				" where codigo = '" + usu.getCodigo() + "')";
			ConectaBanco cb = new ConectaBanco();
			result = cb.ExecutaIUD(SQL);
			cb.FechaConexaoBD();
		}
		
		return result;
		
	}
peczenyj

Comentarios:

  1. UsuarioAcao poderia ser, na verdade, um UsuarioDao. Nesse caso vc poderia passar o objeto Usuario para os métodos, tipo x.adiciona(usuario);
  2. Vc deveria usar PreparedStatement – seu codigo é extremamente vulnerável a SQL Injection, sem falar que vai dar pau com alguem chamado Joana D’arc :wink:
  3. Vc poderia lançar apenas SQLException. No caso de outras exceptions como ClassNotFoundException vc poderia interceptar e lançar um tipo de exception identificando que outra coisa aconteceu.

Tudo isso fica claro se vc ler o capitulo de JDBC na apostila da Caelum FJ-21

Alias, getDeletar é o tipo do método confuso. Vc manda deletar, vc não ‘pega’ uma ‘deleção’. E retornar um inteiro é mais enigmatico ainda em linguagens como o Java – em C seria normal, esperado até, mas C não tem metade dos recursos do Java (e vice-versa).

Outra coisa, vc não pode comparar strings com == e !=, nem sempre funciona, use o método equals! E lembre- se que vc pode ter valores nulos, para isso vc pode declarar na documentação do seu código (Javadoc - aprenda a usa-lo, será util) que certas informações não podem ser null e isso é um contrato, por exemplo, senão vc vai ter um NullPointerException explodindo pro ai:)

Mais OO que isso tudo só Hibernate!

Wiliam_Witter

é o caso de vc instanciar a classe Usuario ai dendro do seu UsuarioAction.

Wiliam_Witter
raschefelipe:
A maneira mais OO seria assim ?????
public int getAlterar(Usuario usu) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
		
		int result = 0;
		
		if (usu.getNome() !="" && usu.getSenha() !="" && usu.getCodigo() !=""){
			String SQL = "update usuarios set nome = '" + usu.getNome() + "' , senha = '" + usu.getSenha() +
				" where codigo = '" + usu.getCodigo() + "')";
			ConectaBanco cb = new ConectaBanco();
			result = cb.ExecutaIUD(SQL);
			cb.FechaConexaoBD();
		}
		
		return result;
		
	}

esse ai é o padrão de qualquer classe OO

R

blz pura galera

valeu !

Criado 16 de outubro de 2008
Ultima resposta 16 de out. de 2008
Respostas 5
Participantes 3