Erro na gravaÇÃo de dados mysql

4 respostas
T

Olá pessoal… dando continuidade ao material em que estou estudando me deparei com um erro no meu código que não estou conseguindo assimilar…

Vejam…

Minha Classe Cliente:

package capitulo08;

import java.sql.*;

public class Cliente {
	private int idcliente = 0;
	private String nome = "";
	private String endereco = "";
	private String cidade = "";
	private String email = "";
	private String senha = "";
	
	public void setIdcliente(int idcliente) {
		this.idcliente = idcliente;
	}
	
	public int getIdcliente() {
		return this.idcliente;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getnome() {
		return this.nome;
	}
	
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	
	public String getEndereco() {
		return this.endereco;
	}
	
	public void setCidade(String cidade) {
		this.cidade = cidade;
	}
	
	public String getCidade() {
		return this.cidade;
	}
	
	public void setEmail(String email) {
		this.email = email;
	}
	
	public String getEmail() {
		return this.email;
	}
	
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public String getSenha() {
		return this.senha;
	}
	
	public boolean incluir() {
		boolean resultado = false;
		Connection con = Conexao.getConnection();
		String sql = 
"insert into cliente(nome,endereco,cidade,email,senha) ";
		sql +=
 "values('"+this.nome+"',"+this.endereco+",";
		sql += this.cidade+","+this.email+","+this.senha+")"; 
		try {
			Statement st = con.createStatement();
			st.executeUpdate(sql);
			resultado = true;
		} catch(SQLException e) {
			resultado = false;
		} catch(Exception e) {
			resultado = false;
		}
		return resultado;
	}

	public boolean alterar() {
		boolean resultado = false;
		Connection con = Conexao.getConnection();
		String sql = "update cliente";
		sql += "set nome = '"+this.nome+"', ";
		sql += "endereco = "+this.endereco+", ";
		sql += "cidade = "+this.cidade+", ";
		sql += "email = "+this.email+", ";
		sql += "senha = "+this.senha;
		sql += " where idcliente= "+this.idcliente;

		try {
			Statement st = con.createStatement();
			int numRegs = st.executeUpdate(sql);
			if (numRegs>0)
			   resultado = true;
			else
			   resultado = false;
		} catch(SQLException e) {
			   resultado = false;
		} catch(Exception e) {
			   resultado = false;
		}
		return resultado;
	}

	public boolean excluir() {
		boolean resultado = false;
		Connection con = Conexao.getConnection();
		String sql = "delete from cliente ";
		sql += "where idcliente = "+this.idcliente;

		try {
			Statement st = con.createStatement();
			int numRegs = st.executeUpdate(sql);
			if (numRegs>0)
				   resultado = true;
				else
				   resultado = false;
		} catch(SQLException e) {
			   resultado = false;
		} catch(Exception e) {
			   resultado = false;
		}
		return resultado;
	}

	public boolean buscar() {
		boolean resultado = false;
		Connection con = Conexao.getConnection();
		String sql = "select * from cliente";
		sql += " where idcliente="+this.idcliente;
		try {
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery(sql);
			if (! rs.next()) {
				resultado = false;
			}
			else {
				this.nome  =
 rs.getString("nome");
				this.endereco =
 rs.getString("endereco");
				this.cidade      = rs.getString("cidade");
				this.email      = rs.getString("email");
				this.senha      = rs.getString("senha");
				resultado = true;
			}
		} catch(SQLException e) {
			resultado = false;
		} catch(Exception e) {
			resultado = false;
		}
		return resultado;
	}
}

Minha Classe Conexão:

package capitulo08;
import java.sql.*;
public class Conexao {
	public static String status ="";
	public static Connection getConnection() {
		Connection con = null;
		try {
			
	Class.forName("com.mysql.jdbc.Driver").newInstance();
	        String url =
	   "jdbc:mysql://127.0.0.1/tarcisio?user=root&password=root";
	        con = DriverManager.getConnection(url);
	        status = "Conexão aberta";
		} catch (SQLException e){
			status = e.getMessage();
		}catch (Exception e) {
			status = e.getMessage();
		}return con;

}

}

Meu Form que recebe os dados do cliente:

<html>
<head>
<title>Proposto 07</title>
</head>
<body>
<center>
<h1>Proposto 07 ? Java Bean</h1>
<hr>
<br>
<table border="0">
<tr>
<td>
<form action="proposto07b.jsp">
Nome: <input type="text" name="nome" size="40"><br>
Endereço: <input type="text" name="endereco" size="40"><br>
Cidade: <input type="text" name="cidade" size="40"><br>
E-mail: <input type="text" name="email" size="30"><br>
Senha: <input type="text" name="senha" size="10"><br>
<input type="submit" value="Gravar" name="enviar">
</form>
</td>
</tr>
</table>
<br>
<hr>

Meu Form que chama o método incluir e grava:

<html>
<head>
<title>Proposto 07</title>
</head>
<body>
<center>
<h1>Proposto 07 ? Java Bean</h1>
<hr>
<br>
<jsp:useBean id="objCliente" scope="session"
class="capitulo08.Cliente" />
<jsp:setProperty name="objCliente" property="*" />
<%
  if(objCliente.incluir())
    out.println("<h2>Cliente cadastrado com sucesso!</h2>");
  else
    out.println("<h2>Erro na gravação do Cliente!</h2>");
%>
<br>
<hr>
</body>
</html>

Aí que vem o erro, ele não grava no banco e retorna a mensagem condicional do caso alternativo…

Onde estou errando?

Obs.: no banco esta tudo Ok… insiro dados e consulto-os… mas pelo form é me retornado esse erro.

Aguardo uma posição…

4 Respostas

emmanuelrock

Olá amigo, tente fazer isso:

String sql =   "insert into cliente (nome,endereco,cidade,email,senha) values('"+this.nome+"','"+this.endereco+"',
                      '"+this.cidade+"','"+this.email+"','"+this.senha+"')";

Em campos String deve-se colocar aspas simples, veja se funciona…

Abraço…

B

Seria melhor usar um PreparedStatement ao invés de concatenar strings.

C

Amigo,
use o PreparedStatement evita o SQL INJECTION e tb problemas com STRINGs com caracteres com os caracteres ’ "

Regis_A_Rocha

um exemplo usando PreparedStatement

public class ContatoDAO {

// a conexão com o banco de dados
private Connection connection;

public ContatoDAO() throws SQLException {

this.connection = ConnectionFactory.getConnection();

}

public void adiciona(Contato contato) throws SQLException {

// prepared statement para inserção

String sql = insert into contatos (nome,email,endereco) values (?,?,?);

PreparedStatement stmt = connection.prepareStatement(sql);
// seta os valores

stmt.setString(1,contato.getNome());

stmt.setString(2,contato.getEmail());

stmt.setString(3,contato.getEndereco());
// executa

stmt.execute();

stmt.close();

}

}
Criado 20 de julho de 2009
Ultima resposta 20 de jul. de 2009
Respostas 4
Participantes 5