Java para de Inserir no Mysql

Olá, estou desenvolvendo um projeto para faculdade de java web. Consegui montar todo o sistema, porém não consigo mais inserir informações no banco. Consigo puxar informações de lá de boa para fazer login. E o estranho é que de vez em quando funciona, porém pára novamente. Estou usando o eclipse e o Mysql. Alguém já passou por esse impasse ?

Há erros? Se não há, vc precisa arrumar os seus catchs

Olá Orochimaru. Nao mostra nenhuma mensagem. O esquema é o seguinte:
Tem a tela principal onde tem os botoes de fazer login ou se inscrever. Ao clicar em criar, é direcionado para uma pagina HTML com o formulario, que manda essas informaçoes para o meu command “criar_cliente”, que manda para o DAO e, da “criar_cliente” manda a resposta para uma JSP informando o sucesso do cadastro. Só que do nada banco para de inserir as informaçoes, e vejo tbm no console do eclipse que parece que ele faz a criaçao de user 2 vezes. Mas vejo que nao perco comunicaçao com o banco pq consigo logar com user criado diretamente no banco.

posta o trecho do código onde vc trabalha com o banco e do servlet que vc ta usando pra fzr a requisição do formulário .

No caso, se vc consegue consegue buscar as informações do banco, mas não consegue inserir, já da pra saber que n é problema na conexão com o banco, vc ta fazendo o parsing adequado para os parâmetros da requisição? Lembre que eles vem em forma de String, caso algum dado seja de um tipo diferente, ou possua um número maior da carácteres, que vc definiu ao criar a table, ele retorna um sql erro, que pode n estar sendo tratado.

Segue o Command CriarCliente:

package command;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Cliente;
import service.ClienteService;

public class CriarCliente implements Command {

@Override
public void executar(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
	String pId = request.getParameter("id");
	String pNome = request.getParameter("nome");
	String pEmail = request.getParameter("email");
	String pLogin = request.getParameter("login");
	String pSenha = request.getParameter("senha");
	int id = -1;
	try {
		id = Integer.parseInt(pId);
	} catch (NumberFormatException e) {

	}

	Cliente cliente = new Cliente();
	cliente.setId_Cliente(id);
	cliente.setNome(pNome);
	cliente.setEmail(pEmail);
	cliente.setLogin(pLogin);
	cliente.setSenha(pSenha);

	ClienteService cs = new ClienteService();

	RequestDispatcher view = null;
	HttpSession session = request.getSession();

	cs.criar(cliente);
	ArrayList<Cliente> lista = new ArrayList<>();
	lista.add(cliente);
	session.setAttribute("lista", lista);
	view = request.getRequestDispatcher("ListarClientes.jsp");

	view.forward(request, response);

}

public int busca(Cliente cliente, ArrayList<Cliente> lista) {
	Cliente to;
	for (int i = 0; i < lista.size(); i++) {
		to = lista.get(i);
		if (to.getId_Cliente() == cliente.getId_Cliente()) {
			return i;
		}
	}
	return -1;
}

}

Segue trecho do Service que chama o DAO

package service;

import model.Cliente;
import dao.ClienteDAO;

public class ClienteService {
ClienteDAO dao = new ClienteDAO();

public int criar(Cliente cliente) {
	return dao.criar(cliente);
}

Segue trecho do DAO

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import model.Cliente;

public class ClienteDAO {
public int criar(Cliente cliente) {
String sqlInsert = “INSERT INTO cliente(nome, email, login, senha) VALUES (?, ?, ?, ?)”;
try (Connection conn = ConnectionFactory.obtemConexao();
PreparedStatement stm = conn.prepareStatement(sqlInsert):wink: {
stm.setString(1, cliente.getNome());
stm.setString(2, cliente.getEmail());
stm.setString(3, cliente.getLogin());
stm.setString(4, cliente.getSenha());
stm.execute();
String sqlQuery = “SELECT LAST_INSERT_ID()”;
try (PreparedStatement stm2 = conn.prepareStatement(sqlQuery);
ResultSet rs = stm2.executeQuery():wink: {
if (rs.next()) {
cliente.setId_Cliente(rs.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
return cliente.getId_Cliente();
}

vc n está tratando essa exception, o sistema só vai ignorar esse erro, que não pode ser ignorado, vc deve trata-lo de forma adequada, com uma mensagem, para que seu cliente saiba que não funcionou o cadastro. tenta colocar e.printstacktrace(); e roda pra ver se esse é o erro.

O id qual a funcionalidade dele? Pq o cliente tem que defini-lo? Vc poderia fzr o banco de dados gerar esse id automaticamente, colocando “auto_increment Primary Key”, vc impede que esse número se repita.

sobre o seu problema sobre criar 2 vezes a conta, vc pode criar uma forma de impedir que o dado “nome” se repita, por exemplo; bloquear o botão “submit” enquanto envia é uma solução tbm…

Continua a mesma coisa :confused:

vc viu se a conta ta chegando no banco de dados?

Nao chega. To começando a achar que é algo no apache ou no eclips, pois tenho uma release do projeto mais antiga que eu testei e ai do nada, sem eu mexer parou de funcionar tbm

vish, não ta retornando nenhuma exceção e vc sinalizou elas, se fosse por conta de um formato inválido pra tabela ele iria lançar sql exception. No console n indica nenhum erro?
nesses casos eu costumo espalhar System.out.print pelos métodos que eu acho que está errado, tipo tenta colocar um com System.out.println(nome), lá onde cria a conta só pra saber se ele chegou até lá, esse método ajuda a saber onde o dado está sendo perdido.

olha no console do eclipse pra ver se aparece essa mensagem :"Thu Jul 23 20:03:31 BRT 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+," , ela aparece sempre que há comunicação com o DB

Ainda nada. Segue log do eclipse:

jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server version name: Apache Tomcat/9.0.37
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server built: Jun 30 2020 20:09:49 UTC
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Server version number: 9.0.37.0
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: OS Name: Windows 10
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: OS Version: 10.0
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Architecture: amd64
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Java Home: C:\Program Files\Java\jre1.8.0_261
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: JVM Version: 1.8.0_261-b12
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: JVM Vendor: Oracle Corporation
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: CATALINA_BASE: F:\PROJETOS JAVA 2020\ws-eclipse.metadata.plugins\org.eclipse.wst.server.core\tmp0
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: CATALINA_HOME: F:\PC\Documents\Documents\SAO_JUDAS\3° SEMESTRE\LPI - 3\apache-tomcat-9.0.37
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dcatalina.base=F:\PROJETOS JAVA 2020\ws-eclipse.metadata.plugins\org.eclipse.wst.server.core\tmp0
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dcatalina.home=F:\PC\Documents\Documents\SAO_JUDAS\3° SEMESTRE\LPI - 3\apache-tomcat-9.0.37
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dwtp.deploy=F:\PROJETOS JAVA 2020\ws-eclipse.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Djava.endorsed.dirs=F:\PC\Documents\Documents\SAO_JUDAS\3° SEMESTRE\LPI - 3\apache-tomcat-9.0.37\endorsed
jul 23, 2020 8:14:19 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMAÇÕES: Command line argument: -Dfile.encoding=Cp1252
jul 23, 2020 8:14:19 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFORMAÇÕES: Loaded Apache Tomcat Native library [1.2.24] using APR version [1.7.0].
jul 23, 2020 8:14:19 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFORMAÇÕES: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
jul 23, 2020 8:14:19 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFORMAÇÕES: APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
jul 23, 2020 8:14:19 PM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFORMAÇÕES: OpenSSL successfully initialized [OpenSSL 1.1.1g 21 Apr 2020]
jul 23, 2020 8:14:20 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler [“http-nio-8080”]
jul 23, 2020 8:14:21 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Server initialization in [1432] milliseconds
jul 23, 2020 8:14:21 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service [Catalina]
jul 23, 2020 8:14:21 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet engine: [Apache Tomcat/9.0.37]
jul 23, 2020 8:14:21 PM org.apache.jasper.servlet.TldScanner scanJars
INFORMAÇÕES: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
jul 23, 2020 8:14:22 PM org.apache.jasper.servlet.TldScanner scanJars
INFORMAÇÕES: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
jul 23, 2020 8:14:22 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler [“http-nio-8080”]
jul 23, 2020 8:14:22 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in [1635] milliseconds
CriarCliente
CriarCliente

pelo visto nem mesmo é feita a requisição de comunicação com o banco. vc indicou o caminho que o a requisição deve fazer, url que tem que seguir? pelo que parece ele nem chega na classe “CriarCliente”

Sim, veja na JSP onde tem o formulário que chama o command:

					<div class="nomes_form">
						<div class="nome_esquerda">
							<label for="nome" class="labels">Nome Completo:</label> <br/>
							 <input type="text" class="form-control" name="nome" id="nome" required maxlength="100" placeholder="nome completo">
							<br/>
						</div>
						<div class="nome_direita">
							<label for="login" class="labels">Login:</label> <br/>
							<input type="text" class="form-control" name="login" id="login" required maxlength="60" placeholder="seu nickname">
							<br/>
						</div>
					</div>
					
					<div class="emails">
						<label for="email" class="labels">E-Mail:</label>  <br/>
						<input type="email" class="form-control" name="email" id="email" maxlength="50" placeholder="email obrigatório">
						<br/>
					</div>
					
					<div class="senhas_form">
						<div class="senha_esquerda">
							<label for="senha" class="labels">Senha:</label>  <br/>
							<input type="password" class="form-control" name="senha" id="senha" required maxlength="30" placeholder="crie uma senha">
							<br/>
						</div>							
						<div class="senha_direita">
							<label for="senha2" class="labels">Confirmar Senha:</label>  <br/>
							<input type="password" class="form-control" name="senha2" id="senha2" required maxlength="30" placeholder="repita sua senha">
							<br/>
							<br/>
						</div>
						
					</div>
					<div id="actions" class="row_baixo" align="center">
            <div class="col-md-12">
                <button type="submit" class="submit_button" name="command" value="CriarCliente">Enviar</button>
                <a href="index.jsp" class="cancel">Cancelar</a>

onde vc chama essa função? lá vc trata essa exceptions?

Nao entendi

onde vc chama esse método criar conta? onde fica a url pra chegar até ele? qual a resposta que vc dá ao cliente?

Na JSP do formulario, encaminho os dados para a criarcliente:

<div class="col-md-12">
                <button type="submit" class="submit_button" name="command" value="CriarCliente">Enviar</button>
                <a href="index.jsp" class="cancel">Cancelar</a>

E ai a criarcliente recebe manda pro DAO, e como reposta de cadastro é a Listarclintes.jsp

                            <form action="controller.do" method="post">
                            
                                        <br/><br/>

                                        <hr class="border">

                                        <br/>

                                </div>
                                <!-- /#top -->
                            </form>
                            <c:if test="${not empty lista}">

                                    <table class="dados_users" cellspacing="0" cellpadding="0">
                                        <thead>
                                            <tr>
                                                <th class="ths">ID</th>
                                                <th class="ths">Nome</th>
                                                <th class="ths">Email</th>
                                                <th class="ths">Login</th>
                                                <th class="ths"> </th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                        <c:forEach var="cliente" items="${lista }">
                                                <tr>
                                                        <td class="before_nexts">
                                                        ${cliente.id_Cliente }
                                                        </td>
                                                        <td class="nexts"> 
                                                            ${cliente.nome }
                                                        </td>
                                                        <td class="nexts">
                                                            ${cliente.email }
                                                        </td>
                                                        <td class="nexts">
                                                            ${cliente.login }
                                                        </td >
                                                        <td class="nexts_post">
                                                        </td>
                                                    </tr>             
                                        </c:forEach>

eu fiz um projeto semelhante mas eu usei outro método pra fazer os cadastros.

		<h1>Cadastro de ponto de coleta</h1>
		<fieldset>
			<div class="field">
				<legend>
					<h2>Informações da entidade</h2>
				</legend>

				<label for="name">Nome da entidade</label> <input name="name"
					required>
			</div>

			<div class="field-group">
				<div class="field">
					<label for="endereco">Endereço</label> <input name="endereco"
						required>
				</div>
				<div class="field">
					<label for="casa">Bairro</label> <input name="casa" required>
				</div>
			</div>
			<div class="field-group">
				<div class="field">

					<label for="uf">Estado</label> <select name="uf" required>
						<option value="">Escolha o estado</option>
						<%
							IbgeApi api = new IbgeApi();
						JSONArray jsonA = api.get();

						for (int i = 0; i < jsonA.length();) {

							JSONObject json = jsonA.getJSONObject(i);
							out.print("<option value='" + json.get("sigla") + "'>" + json.get("nome") + "</option>");
							i++;
						}
						%>
					</select>
				</div>
				<div class="field">
					<label for="cidade">Cidade</label> <select name="cidade" required>

						<option value="0">Escolha a cidade</option>

					</select>
				</div>
			</div>
		</fieldset>

		<fieldset id="colect">
			<legend>
				<h2>Itens de coleta</h2>
			</legend>
			<div class="itens-grid">

				<li data-id="1"><img
					src="./style/CreatePoint/assets/lampadas.svg"> <span>Lâmpadas</span>
				</li>
				<li data-id="2"><img
					src="./style/CreatePoint/assets/baterias.svg"> <span>Pilhas
						e Baterias</span></li>
				<li data-id="3"><img
					src="./style/CreatePoint/assets/eletronicos.svg"> <span>Resíduos
						Eletrônicos</span></li>
				<li data-id="4"><img
					src="./style/CreatePoint/assets/oleo.svg"> <span>Óleo
						de Cozinha</span></li>
				<li data-id="5"><img
					src="./style/CreatePoint/assets/papeis-papelao.svg"> <span>Papéis
						e Papelão</span></li>
				<li data-id="6"><img
					src="./style/CreatePoint/assets/organicos.svg"> <span>Resíduos
						Orgânicos</span></li>


			</div>

		</fieldset>

		<input type="hidden" name="coleta" value="" required>
		<button id="sub" type="submit">Cadastrar</button>
	</form>

ta meio bagunçado pq eu tentei fzr sem JS. Eu simplismente criei um formulário que manda os valores para a URL que determinei no “action”. ainda n consengui ver onde vc determina essa url. deve ser esse o problema, visto que o método CriaContato nem chega a ser ativado.