java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1) (RESOLVIDO)

Galera, bom dia!

Estou recebendo este stack:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Mon Mar 14 09:09:32 BRT 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
	at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1419)
	at com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1432)
	at com.mysql.cj.jdbc.ClientPreparedStatement.setString(ClientPreparedStatement.java:1762)
	at br.com.fjsistemas.dao.CadastroClienteDAO.salvarDAO(CadastroClienteDAO.java:42)
	at br.com.fjsistemas.controle.CadastroClienteControle.salvarControle(CadastroClienteControle.java:36)
	at br.com.fjsistemas.visao.CadastroCliente.salvarCadastroCliente(CadastroCliente.java:218)
	at br.com.fjsistemas.util.FormularioPadrao$3.actionPerformed(FormularioPadrao.java:67)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6397)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Contexto:

Sistema de cadastro de cliente com banco MySQL

Código:

package br.com.fjsistemas.dao;

import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;

import br.com.fjsistemas.interfaces.InterfaceDAO;
import br.com.fjsistemas.modelo.CadastroClienteModelo;
import br.com.fjsistemas.sql.ConexaoBanco;

public class CadastroClienteDAO implements InterfaceDAO {

	String sql;
	PreparedStatement stm;

	@Override
	public void salvarDAO(Object... valor) {
		CadastroClienteModelo ccm = (CadastroClienteModelo) valor[0];
		if (ccm.getId() == 0) {
			sql = "INSERT INTO cadastro_cliente (cliente) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (sexo) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (dataN) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (cpf) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (rg) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (endereco) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (numero) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (bairro) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (cep) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (cidade) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (estado) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (fone) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (cel) VALUES (?)";
			sql = "INSERT INTO cadastro_cliente (email) VALUES (?)";
		} else {
			sql = "UPDATE cadastro_cliente SET cliente=? WHERE id_cadastro_cliente=?";
		}

		try {
			stm = ConexaoBanco.conectar().prepareStatement(sql);
			stm.setString(2, ccm.getTxtClienteNome());
			stm.setString(3, ccm.getComboBoxClienteSexo());
			stm.setString(4, ccm.getFormatterTxtDataNascimento());
			stm.setString(5, ccm.getTxtFormatterClienteCPF());
			stm.setString(6, ccm.getTxtFormatterClienteRG());
			stm.setString(7, ccm.getTxtClienteEndereco());
			stm.setString(8, ccm.getTxtClienteNumero());
			stm.setString(9, ccm.getTxtClienteBairro());
			stm.setString(10, ccm.getTxtFormatterClienteCEP());
			stm.setString(11, ccm.getTxtClienteCidade());
			stm.setString(12, ccm.getComboBoxClienteEstado());
			stm.setString(13, ccm.getTxtFormatterTelefone());
			stm.setString(14, ccm.getTxtFormatterClienteCelular());
			stm.setString(15, ccm.getTxtClienteEmail());
			

			if (ccm.getId() > 0)
				stm.setInt(1, ccm.getId());

			stm.execute();
			stm.close();
			JOptionPane.showMessageDialog(null, "Sucesso");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void excluirDAO(int id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void carregarComboBoxDAO(JComboBox<String> itens) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void consultarDAO(Object... valor) throws SQLException {
		// TODO Auto-generated method stub

	}
}

Como resolver este stack?

Acredito q que esteja faltando o index 1, setString(1). E querendo ou não, tem um momento que vc envia só um update, e tem outro momento que vc envia varias paradas.

tipo aqui:

sql = "UPDATE cadastro_cliente SET cliente=? WHERE id_cadastro_cliente=?";

vc só vai ter um setString, indo pra o if, vc tem mais parametros.


Outra coisa,

Não entendi esse trecho, qual vc espera ser o output dele? O que vai sair é só esse ultimo, vc ta atribuindo um valor novo pra a var sql em cada nova linha:

INSERT INTO cadastro_cliente (email) VALUES (?)

1 curtida

@rodriguesabner

Obg por sua atenção, então o que eu quero é que todos os dados, de todos os campos sejam gravados no banco…pelo que entendi de sua resposta, meu erro está em colocar varias sql separadas, eu deveria criar uma unica sql para persistir todos os dados, é isso?

Como neste exemplo que achei agora na net:

String sql = "insert into tb_clientes "+
"

(nome,tratamento,estado_civil,rua,numero,bairro,cidade,estado,complemento," +
				     "rg,cpf, orgao_emissao_rg,data_emissao_rg,telefone_residencial, "+
				     "telefone_celular,telefone_recados,pessoa_recados,data_registro,obs) "+
				     " values "+
				     "('?','?','?','?',?,'?','?','?','?'," +
				     "'?','?','?','?','?','?','?','?','?','?')";

sim e não,

Se vc quer só fazer o update, aí mantém a string unica.
Agora se vc quer fazer o insert com varios parametros, tem que montar a query com todos os parametros nela.

E claro, o seu statement deve tambem ser dinamico, pra entender quando deve atualizar e quando deve inserir, só colocando isso dentro do if ja resolve

1 curtida

@rodriguesabner

Então criei a String unica, mas o erro continua…veja:

stack:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Mon Mar 14 10:06:20 BRT 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
	at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1419)
	at com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1432)
	at com.mysql.cj.jdbc.ClientPreparedStatement.setString(ClientPreparedStatement.java:1762)
	at br.com.fjsistemas.dao.CadastroClienteDAO.salvarDAO(CadastroClienteDAO.java:48)
	at br.com.fjsistemas.controle.CadastroClienteControle.salvarControle(CadastroClienteControle.java:36)
	at br.com.fjsistemas.visao.CadastroCliente.salvarCadastroCliente(CadastroCliente.java:218)
	at br.com.fjsistemas.util.FormularioPadrao$3.actionPerformed(FormularioPadrao.java:67)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6397)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Codigo

package br.com.fjsistemas.dao;

import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;

import br.com.fjsistemas.interfaces.InterfaceDAO;
import br.com.fjsistemas.modelo.CadastroClienteModelo;
import br.com.fjsistemas.sql.ConexaoBanco;

public class CadastroClienteDAO implements InterfaceDAO {

	String sql;
	PreparedStatement stm;

	@Override
	public void salvarDAO(Object... valor) {
		CadastroClienteModelo ccm = (CadastroClienteModelo) valor[0];
		if (ccm.getId() == 0) {

			sql = "INSERT INTO cadastro_cliente (cliente,sexo,dataN,cpf,rg,endereco,numero,bairro,cep,cidade,estado, fone,cel,email VALUES('?','?','?','?',?,'?','?','?','?','?','?', '?', '?','?')";

			/*
			 * sql = "INSERT INTO cadastro_cliente (cliente) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (sexo) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (dataN) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (cpf) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (rg) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (endereco) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (numero) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (bairro) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (cep) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (cidade) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (estado) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (fone) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (cel) VALUES (?)"; sql =
			 * "INSERT INTO cadastro_cliente (email) VALUES (?)";
			 */
		} else {
			sql = "UPDATE cadastro_cliente SET cliente=? WHERE id_cadastro_cliente=?";
		}

		try {
			stm = ConexaoBanco.conectar().prepareStatement(sql);
			stm.setString(1, ccm.getTxtClienteNome());
			stm.setString(2, ccm.getComboBoxClienteSexo());
			stm.setString(3, ccm.getFormatterTxtDataNascimento());
			stm.setString(4, ccm.getTxtFormatterClienteCPF());
			stm.setString(5, ccm.getTxtFormatterClienteRG());
			stm.setString(6, ccm.getTxtClienteEndereco());
			stm.setString(7, ccm.getTxtClienteNumero());
			stm.setString(8, ccm.getTxtClienteBairro());
			stm.setString(9, ccm.getTxtFormatterClienteCEP());
			stm.setString(10, ccm.getTxtClienteCidade());
			stm.setString(11, ccm.getComboBoxClienteEstado());
			stm.setString(12, ccm.getTxtFormatterTelefone());
			stm.setString(13, ccm.getTxtFormatterClienteCelular());
			stm.setString(14, ccm.getTxtClienteEmail());

			if (ccm.getId() > 0)
				stm.setInt(15, ccm.getId());
				stm.execute();
				stm.close();
			JOptionPane.showMessageDialog(null, "Sucesso");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void excluirDAO(int id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void carregarComboBoxDAO(JComboBox<String> itens) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void consultarDAO(Object... valor) throws SQLException {
		// TODO Auto-generated method stub

	}
}

caiu no if ou else?

1 curtida

else

Pra facilitar o entendimento, pensa assim, a qtd de ? éa quantidade de set...'s que vc deve ter, se vc tem 3 values (?, ?, ?)

o seu setX deve ser assim:

stm.setString(1, item1); // isso se refere ao 1o ponto de interrogacao
stm.setString(2, item2); // 2o ?
stm.setInt(3, item3);   // 3o ?, supondo que isso seja um id do tipo inteiro

Então o seu statement deveria ser somente assim:

cliente=? WHERE id_cadastro_cliente=?
1 curtida

Aí foi como comentei, como vc tem dois tipos de querys diferentes, com parametros diferentes. Vc pode mover os trechos pra dentro do if.

if 
   String sql = "..."; //suponhamos que isso aqui tenha 2 values (?, ?)
   	stm = ConexaoBanco.conectar().prepareStatement(sql);
	stm.setString(1, ccm.algumaCoisa());
	stm.setString(2, ccm.getId());
    stm.execute();
	stm.close();
else
    String sql = "..."; //suponhamos que isso aqui tenha 4 values (?, ?, ?, ?)
	stm = ConexaoBanco.conectar().prepareStatement(sql);
	stm.setString(1, ccm.algumaCoisa());
	stm.setString(2, ccm.getId());
	stm.setString(3, ccm.getId());
	stm.setString(4, ccm.getId());
    stm.execute();
	stm.close();

Pra uma organização melhor, cria um metodo pra um desses dois, pra que cada coisa tenha sua responsabilidade.

entao ficaria:

if (algumaCoisaPraInserir)
   String query = "...";
   metodoQueInsere(query, ccm);
else 
   String query = "...";
   metodoQueAtualiza(query, ccm);
1 curtida

Outra forma seria usar uma variável para ir incrementando o índex na medida que os valores forem sendo setados para serem inseridos/atualizados:

int index = 1;

stm = ConexaoBanco.conectar().prepareStatement(sql);
stm.setString(index++, ccm.getTxtClienteNome());
stm.setString(index++, ccm.getComboBoxClienteSexo());
stm.setString(index++, ccm.getFormatterTxtDataNascimento());
stm.setString(index++, ccm.getTxtFormatterClienteCPF());
stm.setString(index++, ccm.getTxtFormatterClienteRG());
stm.setString(index++, ccm.getTxtClienteEndereco());
stm.setString(index++, ccm.getTxtClienteNumero());
stm.setString(index++, ccm.getTxtClienteBairro());
stm.setString(index++, ccm.getTxtFormatterClienteCEP());
stm.setString(index++, ccm.getTxtClienteCidade());
stm.setString(index++, ccm.getComboBoxClienteEstado());
stm.setString(index++, ccm.getTxtFormatterTelefone());
stm.setString(index++, ccm.getTxtFormatterClienteCelular());
stm.setString(index++, ccm.getTxtClienteEmail());

if (ccm.getId() > 0) {
  stm.setInt(index++, ccm.getId());
}

Desse jeito, tanto faz, se o ID é o primeiro ou o último, ou se vai ser informado ou não, basta organizar de acordo com a operação executada (insert/update).

2 curtidas

Que legal Lucas, não sabia dessa forma, bem mais prático

1 curtida

@rodriguesabner
@Lucas_Camara

o erro continua, tentei fazer como o Lucas sugeriu:

Code

package br.com.fjsistemas.dao;

import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;

import br.com.fjsistemas.interfaces.InterfaceDAO;
import br.com.fjsistemas.modelo.CadastroClienteModelo;
import br.com.fjsistemas.sql.ConexaoBanco;

public class CadastroClienteDAO implements InterfaceDAO {

	String sql;
	PreparedStatement stm;

	@Override
	public void salvarDAO(Object... valor) {
		CadastroClienteModelo ccm = (CadastroClienteModelo) valor[0];

		if (ccm.getId() == 0) {
			sql = "INSERT INTO cadastro_cliente (cliente,sexo,dataN,cpf,rg,endereco,numero,bairro,cep,cidade,estado, fone,cel,email VALUES('?','?','?','?',?,'?','?','?','?','?','?', '?', '?','?')";
		} else {
			sql = "UPDATE cadastro_cliente SET cliente=? WHERE id=?";
		}

		try {
			stm = ConexaoBanco.conectar().prepareStatement(sql);

			int index = 1;

			stm.setString(index++, ccm.getTxtClienteNome());
			stm.setString(index++, ccm.getComboBoxClienteSexo());
			stm.setString(index++, ccm.getFormatterTxtDataNascimento());
			stm.setString(index++, ccm.getTxtFormatterClienteCPF());
			stm.setString(index++, ccm.getTxtFormatterClienteRG());
			stm.setString(index++, ccm.getTxtClienteEndereco());
			stm.setString(index++, ccm.getTxtClienteNumero());
			stm.setString(index++, ccm.getTxtClienteBairro());
			stm.setString(index++, ccm.getTxtFormatterClienteCEP());
			stm.setString(index++, ccm.getTxtClienteCidade());
			stm.setString(index++, ccm.getComboBoxClienteEstado());
			stm.setString(index++, ccm.getTxtFormatterTelefone());
			stm.setString(index++, ccm.getTxtFormatterClienteCelular());
			stm.setString(index++, ccm.getTxtClienteEmail());
			
			if(ccm.getId() > 0) {
				stm.setInt(index++, ccm.getId());
			}

			stm.execute();
			stm.close();

			JOptionPane.showMessageDialog(null, "Registro Criado com Sucesso!");

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	@Override
	public void excluirDAO(int id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void carregarComboBoxDAO(JComboBox<String> itens) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void consultarDAO(Object... valor) throws SQLException {
		// TODO Auto-generated method stub

	}

}

Stack:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Mon Mar 14 10:53:18 BRT 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
	at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1419)
	at com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1432)
	at com.mysql.cj.jdbc.ClientPreparedStatement.setString(ClientPreparedStatement.java:1762)
	at br.com.fjsistemas.dao.CadastroClienteDAO.salvarDAO(CadastroClienteDAO.java:34)
	at br.com.fjsistemas.controle.CadastroClienteControle.salvarControle(CadastroClienteControle.java:36)
	at br.com.fjsistemas.visao.CadastroCliente.salvarCadastroCliente(CadastroCliente.java:218)
	at br.com.fjsistemas.util.FormularioPadrao$3.actionPerformed(FormularioPadrao.java:67)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6397)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Quase acertou:

@Override
public void salvarDAO(Object... valor) {
  CadastroClienteModelo ccm = (CadastroClienteModelo) valor[0];
  Boolean isNew = ccm.getId() == 0;

  if (isNew) {
    sql = "INSERT INTO cadastro_cliente (cliente,sexo,dataN,cpf,rg,endereco,numero,bairro,cep,cidade,estado, fone,cel,email) VALUES ('?','?','?','?',?,'?','?','?','?','?','?', '?', '?','?')";
  } else {
    sql = "UPDATE cadastro_cliente SET cliente = ? WHERE id = ?";
  }

  try {
    stm = ConexaoBanco.conectar().prepareStatement(sql);

    int index = 1;

    if (isNew) {
      stm.setString(index++, ccm.getTxtClienteNome());
      stm.setString(index++, ccm.getComboBoxClienteSexo());
      stm.setString(index++, ccm.getFormatterTxtDataNascimento());
      stm.setString(index++, ccm.getTxtFormatterClienteCPF());
      stm.setString(index++, ccm.getTxtFormatterClienteRG());
      stm.setString(index++, ccm.getTxtClienteEndereco());
      stm.setString(index++, ccm.getTxtClienteNumero());
      stm.setString(index++, ccm.getTxtClienteBairro());
      stm.setString(index++, ccm.getTxtFormatterClienteCEP());
      stm.setString(index++, ccm.getTxtClienteCidade());
      stm.setString(index++, ccm.getComboBoxClienteEstado());
      stm.setString(index++, ccm.getTxtFormatterTelefone());
      stm.setString(index++, ccm.getTxtFormatterClienteCelular());
      stm.setString(index++, ccm.getTxtClienteEmail());
    } else {
      stm.setString(index++, ccm.getTxtClienteNome());
      stm.setInt(index++, ccm.getId());
    }

    stm.execute();
    stm.close();

    JOptionPane.showMessageDialog(null, "Registro Criado com Sucesso!");

  } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
}
1 curtida

@Lucas_Camara o erro continua:

stack

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Mon Mar 14 11:03:54 BRT 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
	at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1419)
	at com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1432)
	at com.mysql.cj.jdbc.ClientPreparedStatement.setString(ClientPreparedStatement.java:1762)
	at br.com.fjsistemas.dao.CadastroClienteDAO.salvarDAO(CadastroClienteDAO.java:36)
	at br.com.fjsistemas.controle.CadastroClienteControle.salvarControle(CadastroClienteControle.java:36)
	at br.com.fjsistemas.visao.CadastroCliente.salvarCadastroCliente(CadastroCliente.java:218)
	at br.com.fjsistemas.util.FormularioPadrao$3.actionPerformed(FormularioPadrao.java:67)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6397)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Código

package br.com.fjsistemas.dao;

import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;

import br.com.fjsistemas.interfaces.InterfaceDAO;
import br.com.fjsistemas.modelo.CadastroClienteModelo;
import br.com.fjsistemas.sql.ConexaoBanco;

public class CadastroClienteDAO implements InterfaceDAO {

	String sql;
	PreparedStatement stm;

	@Override
	public void salvarDAO(Object... valor) {
	  CadastroClienteModelo ccm = (CadastroClienteModelo) valor[0];
	  Boolean isNew = ccm.getId() == 0;

	  if (isNew) {
	    sql = "INSERT INTO cadastro_cliente (cliente,sexo,dataN,cpf,rg,endereco,numero,bairro,cep,cidade,estado, fone,cel,email) VALUES ('?','?','?','?',?,'?','?','?','?','?','?', '?', '?','?')";
	  } else {
	    sql = "UPDATE cadastro_cliente SET cliente = ? WHERE id = ?";
	  }

	  try {
	    stm = ConexaoBanco.conectar().prepareStatement(sql);

	    int index = 1;

	    if (isNew) {
	      stm.setString(index++, ccm.getTxtClienteNome());
	      stm.setString(index++, ccm.getComboBoxClienteSexo());
	      stm.setString(index++, ccm.getFormatterTxtDataNascimento());
	      stm.setString(index++, ccm.getTxtFormatterClienteCPF());
	      stm.setString(index++, ccm.getTxtFormatterClienteRG());
	      stm.setString(index++, ccm.getTxtClienteEndereco());
	      stm.setString(index++, ccm.getTxtClienteNumero());
	      stm.setString(index++, ccm.getTxtClienteBairro());
	      stm.setString(index++, ccm.getTxtFormatterClienteCEP());
	      stm.setString(index++, ccm.getTxtClienteCidade());
	      stm.setString(index++, ccm.getComboBoxClienteEstado());
	      stm.setString(index++, ccm.getTxtFormatterTelefone());
	      stm.setString(index++, ccm.getTxtFormatterClienteCelular());
	      stm.setString(index++, ccm.getTxtClienteEmail());
	    } else {
	      stm.setString(index++, ccm.getTxtClienteNome());
	      stm.setInt(index++, ccm.getId());
	    }

	    stm.execute();
	    stm.close();

	    JOptionPane.showMessageDialog(null, "Registro Criado com Sucesso!");

	  } catch (SQLException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	  }
	}

	@Override
	public void excluirDAO(int id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void carregarComboBoxDAO(JComboBox<String> itens) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void consultarDAO(Object... valor) throws SQLException {
		// TODO Auto-generated method stub

	}

}

Esse último erro foi um insert ou update?

Outra coisa que reparei, é que há aspas simples nas interrogações do insert. Não precisa pq elas são colocadas pelo prepared statement.

1 curtida

por enquanto estou apenas tentando inserir

Remova as aspas simples das interrogações do insert:

INSERT INTO cadastro_cliente 
  (cliente, sexo, dataN, cpf, rg, endereco, numero, bairro, cep, cidade, estado, fone, cel, email) 
VALUES 
  (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Pq isso que está dando erro. Havia apenas uma interrogação sem aspas simples.

1 curtida

@Lucas_Camara

Isto mesmo, após remover as aspas, consegui realizar o registro…muito obg por sua ajuda!!! Está funcionando perfeitamente agora

@rodriguesabner

Muito obrigado por sua atenção tbm!!

1 curtida

@Lucas_Camara ainda ficou um erro, mas não tem stack

A ordem em que foi salvo os dados, ficou errado

no campo id está correto
no campo nome está correto

no campo sexo foi salvo o endereco
no campo dataN(data de nascimento) foi salvo o numero residencial
no cpf salvou o bairro
no rg salvou o endereco
no endereço salvou o email
no numero salvou o estado
no bairro o sexo
no cel a data de nascimento
na cidade o cpf
no fone o rg
no cel salvou o fone
no email o celular

pq? e como resolver?

Execute o código em modo debug e vai vendo qual String para qual index está sendo setado no statement.

1 curtida