NÂO CONSIGO FAZER UPDATE - :!: :!: :!: :!:
trecho da servlet
else if(cmd.equalsIgnoreCase("atualizar")){
dao.atualizar(titulo);
rd = request.getRequestDispatcher("LocadoraServlet?cmd=listar");
}
método q faz inserção
public void atualizar(Titulo titulo){
PreparedStatement ps = null;
Connection conn = null;
if(titulo == null)
System.out.println("O valor passado não pode ser nulo");
try{
String SQL = "UPDATE titulos SET nome=? WHERE isbn=?";
conn = this.conn;
ps = conn.prepareStatement(SQL);
ps.setString(1, titulo.getNome());
ps.setString(2, titulo.getIsbn());
ps.executeUpdate();
}catch(SQLException sqle){
System.out.println("Erro ao atualizar dados "+ sqle);
}finally{
ConnectionLocadoraFactory.closeConnection(conn, ps);
}
}
página que mostra os registros do banco
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
import="java.util.*, meupacote.Titulo"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Locadora</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<th>ID</th>
<th>Nome</th>
<th>Alteração</th>
</tr>
<%
List titulosList = (List)request.getAttribute("titulosList");
for(Iterator i=titulosList.iterator(); i.hasNext();){
Titulo t = (Titulo)i.next();
%>
<tr>
<td>
<a >
<%=t.getIsbn()%>
</a>
</td>
<td><%=t.getNome()%> </td>
<td>
<a >Excluir</a>
</td>
</tr>
<%
}
%>
</table>
<br />
<a >Adicionar um novo título</a>
<br />
<a >Página Principal</a>
</body>
</html>
[code]
Erro do servidor tomcat
Erro ao atualizar dados com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'nome' cannot be null
[quote=felipealves.gnu]
Erro ao atualizar dados com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'nome' cannot be null
[/quote]
Como o Erro diz: “Column ‘nome’ cannot be null”.
O atributo nome do seu Objeto Titulo provavelmente está nulo. Como você está instanciando o objeto Titulo e atribuindo um valor ao atributo nome deste objeto? Poste o código, pois nele provavelmente está o problema.
[quote=thiagotn][quote=felipealves.gnu]
Erro ao atualizar dados com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'nome' cannot be null
[/quote]
Como o Erro diz: “Column ‘nome’ cannot be null”.
O atributo nome do seu Objeto Titulo provavelmente está nulo. Como você está instanciando o objeto Titulo e atribuindo um valor ao atributo nome deste objeto? Poste o código, pois nele provavelmente está o problema.
[/quote]
Segue o trecho da Servlet onde está sendo instanciado o objeto titulo.
public LocadoraServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String cmd = request.getParameter("cmd");
if(cmd == null){
cmd = "principal";
}
LocadoraDAO dao;
Titulo titulo = new Titulo();
if(cmd != null || !cmd.equalsIgnoreCase("principal")){
titulo.setNome(request.getParameter("nome"));
String tipo = request.getParameter("tipo");
if(tipo != null){
titulo.setTipo(Integer.parseInt(tipo));
}
String isbn = request.getParameter("isbn");
if(isbn == null){
isbn="1";
titulo.setIsbn(isbn);
}
titulo.setIsbn(request.getParameter("isbn"));
titulo.setGenero(request.getParameter("genero"));
}
try{
dao = new LocadoraDAO();
RequestDispatcher rd = null;
if(cmd.equalsIgnoreCase("listar")){
List titulosList = dao.todosTitulos();
request.setAttribute("titulosList", titulosList);
rd = request.getRequestDispatcher("/mostrarTitulosCads.jsp");
}
else if(cmd.equalsIgnoreCase("addtit")){
dao.salvar(titulo);
rd = request.getRequestDispatcher("LocadoraServlet?cmd=listar");
}
else if(cmd.equalsIgnoreCase("exc")){
dao.excluir(titulo);
rd = request.getRequestDispatcher("LocadoraServlet?cmd=listar");
}
else if(cmd.equalsIgnoreCase("atu")){
titulo = dao.procurarTitulo(titulo.getIsbn());
HttpSession session = request.getSession(true);
session.setAttribute("titulo", titulo);
rd = request.getRequestDispatcher("/formAtuTitulo.jsp");
}
else if(cmd.equalsIgnoreCase("atualizar")){
dao.atualizar(titulo);
rd = request.getRequestDispatcher("LocadoraServlet?cmd=listar");
}
else if(cmd.equalsIgnoreCase("principal")){
rd = request.getRequestDispatcher("/index.jsp");
}
rd.forward(request, response);
}catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}
}
Coloque também o código do seu formulário de inserção de Título.
segue abaixo
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Inserir Títulos</title>
</head>
<body>
<form action="LocadoraServlet?cmd=addtit" method="post">
<table>
<tr>
<td>ISBN</td><td><input type="text" name="isbn" /> </td>
</tr>
<tr>
<td>Título</td><td><input type="text" name="nome" /> </td>
</tr>
<tr>
<td>Gênero</td><td><input type="text" name="genero" /> </td>
</tr>
<tr>
<td>Tipo</td>
<td><select name="tipo" >
<option value="1">Livro</option>
<option value="2">DVD</option>
<option value="3">CD</option>
</select>
</td>
</tr>
<tr>
<td><input type="submit" name="btCadastrar" value="Enviar" /></td>
</tr>
</table>
</form>
</body>
</html>
o método de salvar segue abaixo, (este método funciona perfeitamente), agora o método de ATUALIZAR é que não funciona
public void salvar(Titulo titulo){
PreparedStatement ps = null;
Connection conn = null;
if(titulo == null)
System.out.println("O valor passado não pode ser nulo");
try{
String SQL = "INSERT INTO titulos (isbn, nome, genero, tipo)" + "VALUES (?, ?, ?, ?)";
conn = this.conn;
ps = conn.prepareStatement(SQL);
ps.setString(1, titulo.getIsbn());
ps.setString(2, titulo.getNome());
ps.setString(3, titulo.getGenero());
ps.setInt(4, titulo.getTipo());
ps.executeUpdate();
}catch(SQLException sqle){
System.out.println("Erro ao inserir dados "+ sqle);
}finally{
ConnectionLocadoraFactory.closeConnection(conn, ps);
}
}
Aparentemente não vi problemas.
Coloca algo como:
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getParameter("nome"));
...
e vê no console se o nome é impresso no console.
[quote=thiagotn]Aparentemente não vi problemas.
Coloca algo como:
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getParameter("nome"));
...
e vê no console se o nome é impresso no console.
[/quote]
Thiago obrigado pela paciência e atenção,
o erro estava no caminho do href q era <a href="LocadoraServlet?cmd=atu&isbn=<%=t.getIsbn()%>"> e não <a href="LocadoraServlet?cmd=atualizar&isbn=<%=t.getIsbn()%>">
fazendo com que a servlet se perdesse.
Valeu Thigo, Abração