Erro na gravaÇÃo de dados mysql

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…

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…

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

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

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();
}
}