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

Pessoal,

Tenho duas classes:

[code]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;
}	

}[/code]

[code]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;
}

}
[/code]

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 !

A maneira mais OO seria assim ???

[code] 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;
	
}[/code]

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!

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

[quote=raschefelipe]A maneira mais OO seria assim ???

[code] 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;
	
}[/code][/quote]

esse ai é o padrão de qualquer classe OO

blz pura galera

valeu !