[RESOLVIDO] PreparedStatement

Olá pessoas, tudo bem com vocês?

Criei uma API com alguns campos e quero pegar os dados do meu usuário que ele inseriu no JTextField e armazenar dentro do banco de dados. Estou estudando o PreparedStatement, mas sinto um pouco de dificuldade. Fiz o seguinte comando SQL de inserção. Segue código. Desde já obrigado.

package br.com.BackEnd;

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

public class PersisitirDadosBanco {

	public static void PersistirBD(ClasseIncluirCliente persistir) {

		Connection conexao = ConexaoDB.conectar();

		// PreparedStatement sql = null;

		try {
			// cria um preparedStatement

			PreparedStatement sql = conexao.prepareStatement("insert into pchelp (cod,nome_empresa, anydesk, teamviewer, telefone, celular) values (?,?,?,?,?,?)");

			// preenche os valores
			sql.setString(1, persistir.getNomeEmpresa());
			sql.setString(2, persistir.getAnyDesk());
			sql.setString(3, persistir.getTeamViewer());
			sql.setString(4, persistir.getTelefone());
			sql.setString(5, persistir.getCelular());
			sql.execute();
			sql.close();

			System.out.println("Gravado!");

			conexao.close();

		} catch (SQLException e) {
			
			e.printStackTrace();
		}

	}

}

oq vc quer fazer? e qual a dificuldade?

Quero que as informações digitadas no TextField, sejam armazenadas no meu banco de dados pchelp quando o usuário clicar no botão “Incluir” .

A minha dificuldade é que eu não sei se o que eu fiz esta certo e se esta, porque não aparece no meu banco.

É que eu não tenho ideia se o que eu estou fazendo esta certo.

Desde já agradeço.

vc executou o código? funcionou? deu erro?

Não, não deu erro. Porém, não insere na tebela. Segue código

public class PersisitirDadosBanco {

	public static void PersistirBD(ClasseIncluirCliente persistir) {

		Connection conexao = ConexaoDB.conectar();

		try {

			PreparedStatement sql = conexao.prepareStatement(
					"insert into pchelp (nome_empresa, anydesk, teamviewer, telefone, celular) values (?,?,?,?,?)");

			sql.setString(1, persistir.getNomeEmpresa());
			sql.setString(2, persistir.getAnyDesk());
			sql.setString(3, persistir.getTeamViewer());
			sql.setString(4, persistir.getTelefone());
			sql.setString(5, persistir.getCelular());
			sql.executeUpdate();
			sql.close();

			System.out.println("Gravado!");

			conexao.close();

		} catch (SQLException e) {

			e.printStackTrace();
		}

	}

}

Pode ser que seja algum evento no meu botão Incluir, segue código

public class ClasseButton extends ClasseTela {

	static JButton jbIncluir;
	static JButton jbEditar;
	static JButton jbExcluir;

	static JTextField jtfNomeEmpresa;
	static JTextField jtfAnyDesk;
	static JTextField jtfTeamViewer;
	static JFormattedTextField jtfTelefone;
	static JFormattedTextField jtfCelular;

	public static void Botao() {

		jbIncluir = new JButton("Incluir");
		jbIncluir.setBounds(30, 260, 500, 20);
		jbIncluir.setBackground(new java.awt.Color(55, 100, 79));
		jbIncluir.setVisible(true);
		jpanelPrincipal.add(jbIncluir);

		jbEditar = new JButton("Editar");
		jbEditar.setBounds(110, 530, 65, 20);
		jbEditar.setBackground(new java.awt.Color(255, 165, 0));
		jbEditar.setVisible(true);
		jpanelPrincipal.add(jbEditar);

		jbExcluir = new JButton("Excluir");
		jbExcluir.setBounds(175, 530, 65, 20);
		jbExcluir.setBackground(new java.awt.Color(205, 0, 0));
		jbExcluir.setVisible(true);
		jpanelPrincipal.add(jbExcluir);

		
	}

	public static void CampoEmpresa() {


		jtfNomeEmpresa = new JTextField();
		jtfNomeEmpresa.setBounds(30, 40, 500, 25);
		jtfNomeEmpresa.setBackground(new java.awt.Color(205, 183, 181));
		jtfNomeEmpresa.setVisible(true);
		jpanelPrincipal.add(jtfNomeEmpresa);

		jtfAnyDesk = new JTextField();
		jtfAnyDesk.setBounds(30, 100, 500, 25);
		jtfAnyDesk.setBackground(new java.awt.Color(205, 183, 181));
		jtfAnyDesk.setVisible(true);
		jpanelPrincipal.add(jtfAnyDesk);

		jtfTeamViewer = new JTextField();
		jtfTeamViewer.setBounds(30, 160, 500, 25);
		jtfTeamViewer.setBackground(new java.awt.Color(205, 183, 181));
		jtfTeamViewer.setVisible(true);
		jpanelPrincipal.add(jtfTeamViewer);

		MaskFormatter telefone = new MaskFormatter();
		try {
			telefone = new MaskFormatter("(##)####-####");
			telefone.setPlaceholderCharacter('_');
		} catch (ParseException excp) {
			System.err.println(excp.getMessage());

		}

		jtfTelefone = new JFormattedTextField(telefone);
		jtfTelefone.setBounds(30, 220, 100, 25);
		jtfTelefone.setBackground(new java.awt.Color(205, 183, 181));
		jtfTelefone.setVisible(true);
		jpanelPrincipal.add(jtfTelefone);

		MaskFormatter celular = new MaskFormatter();
		try {
			celular = new MaskFormatter("(##)#####-####");
			celular.setPlaceholderCharacter('_');
		} catch (ParseException excp) {
			System.err.println(excp.getMessage());

		}

		jtfCelular = new JFormattedTextField(celular);
		jtfCelular.setBounds(150, 220, 110, 25);
		jtfCelular.setBackground(new java.awt.Color(205, 183, 181));
		jtfCelular.setVisible(true);
		jpanelPrincipal.add(jtfCelular);
		
		ExecutarBotoes();
	}

	public static void ExecutarBotoes() {

		ClasseIncluirCliente cliente = new ClasseIncluirCliente();

		jbIncluir.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				cliente.setNomeEmpresa(jtfNomeEmpresa.getText());
				cliente.setAnyDesk(jtfAnyDesk.getText());
				cliente.setTeamViewer(jtfTeamViewer.getText());
				cliente.setTelefone(jtfTelefone.getText());
				cliente.setCelular(jtfCelular.getText());

			}
		});

	}

	public static void Table() {

		DefaultTableModel modelo = new DefaultTableModel() {

			private static final long serialVersionUID = 1L;

			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};

		JTable table = new JTable();
		table.setBounds(20, 300, 515, 230);
		table.setLayout(null);
		table.setVisible(true);
		table.setModel(modelo);

		JScrollPane scrollPanel = new JScrollPane(table);
		scrollPanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPanel.setBounds(20, 300, 515, 230);
		scrollPanel.setBackground(new java.awt.Color(55, 79, 79));
		scrollPanel.setViewportView(table);
		jpanelPrincipal.add(scrollPanel);
		scrollPanel.setVisible(true);

	}
}

Item da lista

Sua query tem 6 parâmetros e você só está setando 5.

insert into pchelp (cod, nome_empresa, anydesk, teamviewer, telefone, celular) values (?,?,?,?,?,?)

Beleza, então o código eu ignoro completo já que eu deixei denominado no banco como cod serial… Ok. Corrigi isso. Porém quando clico no botão Incluir não é inserido no banco. Até tentei debugar mas nada acontece rsrs

Troca estas linhas:

sql.execute();
sql.close();
System.out.println("Gravado!");

Por estas:

int qtd = sql.executeUpdate();
sql.close();
System.out.println(qtd + " registros inseridos!");

E veja o que será impresso.

Opa obrigado pela ajuda. Ainda não insere nada rsrs.

Fiz um teste… comentei a classe toda. E continuou da forma que esta. É como se nem existisse esta classe.

Antes do sql.close() coloque System.out.println(sql.toString()) e veja como como a instrução SQL está sendo ‘montada’.

Finalmente algum progresso


Era minha ClasseButton eu tinha esquecido de instanciar. Agora preciso ver o que a mensagem de erro esta dizendo.
Veja minha classe Jbutton
image

Esqueci de instanciar. Agora tá dando essa mensagem aí dizendo que os dados não foram inseridos. Muito obrigado galera pela ajuda de vocês.

Que a força esteja com vocês. Life long and Prospery

Por que todos os métodos e atributos de suas classes são static?
Arruma primeiro isso aí.

Porque? O que tem de errado? Não entendo muito rsrs Eu mudei meu get and setter do meu telefone onde estava String para Int e me da mensagem para voltar para String

O que está errado é declarar todos os métodos e atributos como static.
Você sabe pra serve o modificador static?
Ele serve para dizer que aquele membro pertence à classe e não aos objetos.

Membros static são compartilhados por todas as instâncias de uma classe, isso significa que você pode instanciar quantos objetos quiser, mas a hora que alterar o valor de um atributo static, aquele valor será alterado para todas as instâncias, pois de fato ele não é alocado na região de memoria dos objetos e sim na região de memória da classe.

Faz o seguinte:

  • Remove o static de todas seus atributos e métodos.
  • Deixa como static somente o método main que é o ponto de entrada de seu programa.
  • E aí vamos arrumar os problemas, se aparecerem.
1 curtida

Entendi. É que eu realmente não entendo muito. Agradeço a explicação. Eu fui fazendo uns testes. E deu tudo certo. Esta armazenando no meu banco. Deu alguns problemas de permissão, mas esta tudo certo ou seja, esta funcionando 1000%. Muito obrigado por dispor uma parte do seu tempo para me ajudar. Agradeço de mais mesmo. Agora preciso fazer essa belezinha ser armazenada em uma tabela e nesta tabela a pessoa pode alterar ou excluir rsrs .

Muito obrigado.

Ah. Eu alterei tirei o static e deixei só o public e o nome do método. Muitíssimo obrigado.

Olha, tenho quase certeza que o problema não era pq estava tudo como static. Você sabe dizer exatamente qual foi a solução?

Sim. Realmente não estava no static. O problema era por causa da classe PersisitirDadosBanco que eu não tinha instanciado no meu método ExecutarBotões conforme imagem abaixo.

image

Só instanciei o objeto e chamei persistir.PersistirBD(cliente);

É claro que deu outro problema pois eu tinha informado só String no meu getter and setters, então fui no banco e onde eu tinha informado o telefone e celular como INT alterei e deixei tudo como VARCHAR.
Depois disso começou a dar mensagem de permissão. Mudei o usuário que estava postgress para o usuário que eu criei como Admin_BD. Fiz o teste de novo e começou a armazenar os dados no banco.

Pessoal. Muito obrigado mesmo. Espero crescer mais como desenvolvedor e poder ajudar outras pessoas assim como vocês fazem. Muito obrigado.

1 curtida