E aí galera tranqüilo. Eu to com um probleminha de validação de campos, a questão é a seguinte na tela de cadastro de produto eu tenho o campo nome do produto e campo descrição do produto, aí quando o usuário informa os dados e clicar no botão cadastrar se o nome e á descrição já estiverem sido cadastrados anteriormente no banco o programa mostraria uma mensagem informando que o nome ou a descrição já existem. Acontece o seguinte o programa mostra a mensagem mais só quando ambos os campos nome é descrição são iguais e fazem parte da mesma linha da tabela, se os campos já estiverem sido cadastrados mais se tiverem em linhas diferentes o programa estar cadastrando do mesmo jeito. Então é isso galera se der pra vocês me ajudarem desde já agradeço.
validação
4 Respostas
Olá, vc deve substituir o comando
PreparedStatement stmt = this.connection.prepareStatement("SELECT nome,descricao FROM Produto WHERE nome= ? and descricao=?");
por
PreparedStatement stmt = this.connection.prepareStatement("SELECT nome,descricao FROM Produto WHERE nome= ? or descricao=?");
É aí Adriano obrigado pela ajuda, mais ainda não deu certo.
E aí Foguinho beleza?
Vamos tentar resolver isso aí, cara
Seguinte: a tua primeira instrução
PreparedStatement stmt = this.connection.prepareStatement("SELECT nome,descricao FROM Produto WHERE nome= ? and descricao=?");
só retornava o registro se fossem iguais o nome E a descrição. Portanto alterando a instrução para usar OR no lugar de AND, a instrução SQL retorna um registro se for igual o nome OU a descriçao. OK?
Segunda parte, após executar a instrução vc compara o valor retornado pela consulta SQL com as propriedades dos objetos usando equals, o que pode estar acontecendo é que, como equals é caso sensitivo, logo “Produto” vai ser diferente de “produto”. Para resolver isso vc pode usar equalsIgnoreCase no lugar de equal. Experimente debugar pra ver o valor das variáveis e o retorno da consulta SQL e posta aí pra nós podermos te ajudar.
Falow
Fala Adriano beleza, rapaz eu to quebrando a minha cabeça aqui há uns três dias com esse problema. A questão é a seguinte ele tá retornando a validação quando o nome é a descrição são iguais, ou quando o nome é igual e a descrição não é, e assim sucessivamento, mais quando o nome e a descrição são diferentes ele mostra uma tela de JOptionPane sem nenhuma mensagem é não grava os dados no banco. Então Adriano eu vou colocar o código das classes e se der pra tu tentar resolver o problema eu fico muito agradecido.
classe Poduto
/*
* Created on 30/05/2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author master
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Produto {
private int codigo;
private String nome;
private String descricao;
/**
*
*/
public Produto() {
}
/**
* @return Returns the codigo.
*/
public int getCodigo() {
return codigo;
}
/**
* @param codigo The codigo to set.
*/
public void setCodigo(int codigo) {
this.codigo = codigo;
}
/**
* @return Returns the descricao.
*/
public String getDescricao() {
return descricao;
}
/**
* @param descricao The descricao to set.
*/
public void setDescricao(String descricao) {
this.descricao = descricao;
}
/**
* @return Returns the nome.
*/
public String getNome() {
return nome;
}
/**
* @param nome The nome to set.
*/
public void setNome(String nome) {
this.nome = nome;
}
}
classe ControleDeConexoes
/*
* Created on 30/05/2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @author master
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class ControleDeConexoes {
//private ControleDeConexoes conexao;
public static final String DRIVER="com.mysql.jdbc.Driver";
public static final String URL="jdbc:mysql://localhost:3306/test";
private final static String USUARIO = "root";
private final static String SENHA = "root";
public static Connection createConnection()throws SQLException {
// Use DRIVER and DBURL to create a connection
// Recommend connection pool implementation/usage
try
{
Class.forName(DRIVER);
return (Connection) DriverManager.getConnection(URL,USUARIO,SENHA);
}catch(ClassNotFoundException e)
{
throw new SQLException(e.getMessage());
}
}
}
classe ProdutoDAO
/*
* Created on 30/05/2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import javax.swing.JOptionPane;
/**
* @author master
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class ProdutoDAO {
private Connection connection;
public ProdutoDAO() throws SQLException {
// initialization
this.connection = ControleDeConexoes.createConnection();
}
public void adiciona(Produto produto)throws SQLException{
PreparedStatement stmt = this.connection.prepareStatement("INSERT INTO produto (nome,descricao) values (?,?)");
// seta os valores
stmt.setString(1,produto.getNome());
stmt.setString(2,produto.getDescricao());
// executa
stmt.execute();
JOptionPane.showMessageDialog(null,"Operação concluída com sucesso");
//stmt.close();
stmt.close();
//}
}
public void update(Produto produto)throws SQLException{
// prepared statement para inserção
PreparedStatement stmt = this.connection.prepareStatement("UPDATE Produto SET Nome=?, WHERE codigo=?");
// seta os valores
stmt.setString(1,produto.getNome());
stmt.setString(2,produto.getDescricao());
stmt.setInt(4,produto.getCodigo());
// executa
stmt.executeUpdate();
stmt.close();
}
public boolean consultarNome(String nome1,String nome2)throws SQLException{
boolean result=true;
PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM Produto WHERE nome= ? or descricao=?");
stmt.setString(1,nome1);
stmt.setString(2,nome2);
ResultSet rs = stmt.executeQuery();
String name = null;
String desc = null;
while(rs.next())
{
// criando o objeto Contato
name=(rs.getString("nome"));
desc=(rs.getString("descricao"));
}
if((name.equals(nome1))&&(desc.equals(nome2))){
JOptionPane.showMessageDialog(null,"O nome é a descrição já existe");
result= true;
}
else if((!name.equals(nome1))&&(desc.equals(nome2))){
JOptionPane.showMessageDialog(null,"A descrição já existe");
result= true;
}
else if((name.equals(nome1))&&(!desc.equals(nome2))){
JOptionPane.showMessageDialog(null,"O nome já existe");
result= true;
}
rs.close();
stmt.close();
return result;
}
public Collection consultarPeloCodigo(int codigo)throws SQLException{
PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM Produto WHERE codigo= ?");
stmt.setInt(1,codigo);
ResultSet rs = stmt.executeQuery();
Collection list = new ArrayList();
while (rs.next())
{
// criando o objeto Contato
Produto produto = new Produto();
produto.setCodigo(rs.getInt(""));
produto.setNome(rs.getString(""));
produto.setDescricao(rs.getString(""));
// adicionando o objeto à lista
list.add(produto);
}
rs.close();
stmt.close();
return list;
}
public Collection consultarTodos()throws SQLException{
PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM Produto");
ResultSet rs = stmt.executeQuery();
Collection list = new ArrayList();
while (rs.next()) {
// criando o objeto Contato
Produto produto = new Produto();
produto.setCodigo(rs.getInt(""));
produto.setNome(rs.getString(""));
produto.setDescricao(rs.getString(""));
// adicionando o objeto à lista
list.add(produto);
}
rs.close();
stmt.close();
return list;
}
}
classe FormCadastrarProd
/*
* Created on 30/05/2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
* @author master
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class FormCadastrarProd extends JFrame{
/** Creates new form FormCadastrarProd */
public FormCadastrarProd() {
initComponents();
setBounds(0,0,400,300);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
labMensagem = new javax.swing.JLabel();
labNome = new javax.swing.JLabel();
labDescricao = new javax.swing.JLabel();
textNome = new javax.swing.JTextField();
textDescricao = new javax.swing.JTextField();
btnCadastrar = new javax.swing.JButton();
btnCancelar = new javax.swing.JButton();
getContentPane().setLayout(null);
setTitle("Cadastra Produto\n");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(null);
jPanel1.setMinimumSize(new java.awt.Dimension(400, 300));
labMensagem.setFont(new java.awt.Font("MS Sans Serif", 0, 20));
labMensagem.setText("Digite os dados do produto");
jPanel1.add(labMensagem);
labMensagem.setBounds(60, 40, 250, 24);
labNome.setFont(new java.awt.Font("MS Sans Serif", 1, 12));
labNome.setText("Nome do Produto:");
jPanel1.add(labNome);
labNome.setBounds(10, 100, 130, 16);
labDescricao.setFont(new java.awt.Font("MS Sans Serif", 1, 12));
labDescricao.setText("Descri\u00e7\u00e3o do Produto:");
jPanel1.add(labDescricao);
labDescricao.setBounds(10, 140, 140, 16);
jPanel1.add(textNome);
textNome.setBounds(150, 100, 210, 20);
jPanel1.add(textDescricao);
textDescricao.setBounds(150, 140, 210, 20);
btnCadastrar.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
btnCadastrar.setText("Cadastrar");
btnCadastrar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCadastrarActionPerformed(evt);
}
});
jPanel1.add(btnCadastrar);
btnCadastrar.setBounds(70, 220, 100, 23);
btnCancelar.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
btnCancelar.setText("Cancelar");
btnCancelar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCancelarActionPerformed(evt);
}
});
jPanel1.add(btnCancelar);
btnCancelar.setBounds(230, 220, 100, 23);
getContentPane().add(jPanel1);
jPanel1.setBounds(0, 0, 400, 280);
pack();
}
private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
}
private void btnCadastrarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try
{
Produto p = new Produto();
p.setNome(textNome.getText());
p.setDescricao(textDescricao.getText());
ProdutoDAO dao= new ProdutoDAO();
if(dao.consultarNome(textNome.getText(),textDescricao.getText())==false){
dao.adiciona(p);
}
}
catch(Exception sqle)
{
JOptionPane.showMessageDialog(null,sqle.getMessage());
}
}
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
dispose();
}
public Produto preecheValoresDeProduto(Produto produto)
{
produto = new Produto();
produto.setNome(textNome.getText());
produto.setDescricao(textDescricao.getText());
return produto;
}
public static void main(String[] args) {
FormCadastrarProd fcp = new FormCadastrarProd();
fcp.setVisible(true);
}
// Variables declaration - do not modify
private javax.swing.JButton btnCadastrar;
private javax.swing.JButton btnCancelar;
private javax.swing.JPanel jPanel1;
private javax.swing.JLabel labDescricao;
private javax.swing.JLabel labMensagem;
private javax.swing.JLabel labNome;
private javax.swing.JTextField textDescricao;
private javax.swing.JTextField textNome;
// End of variables declaration
}