Ao tentar cadastrar dados no PostgresSql não acontece nada! ( Resolvido)

4 respostas
moizheys

Estou tentando fazer algumas inserções no Postgres, apenas para teste com java. Bom quando eu tento inserir os dados simplesmente não acontece nada, não da erro mas também não insere, e não imprime o teste. A conexão com o Banco está ok, já havia testado com um código um pouco mais diferente. Se alguém puder ajudar fico agradecido. O código referente segue abaixo:

package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import model.Sistema;
import model.Usuario;

public class SistemaDAO {
	private	static final String URL ="jdbc:postgresql://localhost:5432/CADASTRO"; 
	
	
	public static final String INSERE_SISTEMA = "insert into sistema('cod_bd','nome_bd','versao_bd','finalidade_bd')values(?,?,?,?)";
	public static final String PESQUISA_SISTEMA = "Select * from sistema";
	
	public Connection getConnection() throws ClassNotFoundException, SQLException{
	
		Class.forName("org.postgresql.Driver"); 
		Connection con = DriverManager.getConnection(URL, "postgres","root");
		System.out.println("Conectado! ");	
		return con;
		}
	
	public void save(Sistema sistemaBean) {
		Connection conn = null;
		PreparedStatement stm = null;
		ResultSet rs = null;
		
		try{
			
		conn = getConnection();
		stm = conn.prepareStatement(INSERE_SISTEMA);
			
		stm.setString(1,sistemaBean.getCod());
		stm.setString(2,sistemaBean.getNome());
		stm.setString(3,sistemaBean.getVersao());
		stm.setString(4,sistemaBean.getFinalidade());
		
		
		//inserindo
		int qtde = stm.executeUpdate();
		System.out.println("Foram inseridos "+ qtde);
		stm.close();
		
		
		//Teste
		stm = conn.prepareStatement(PESQUISA_SISTEMA);
		rs = stm.executeQuery();
		while(rs.next()){
			String codigo = rs.getString("cod_bd");
			String nome = rs.getString("nome_bd");
			String versao = rs.getString("versao_bd");
			String finalidade = rs.getString("finalidade_bd");
			System.out.println(codigo+" , " + nome + " , " + versao + " , " + finalidade);
		}
		}
		
		catch(SQLException e){
			e.printStackTrace();
		}catch (ClassNotFoundException e) {
			e.printStackTrace();
		}finally{
			if(rs != null){
				try{rs.close();}catch(SQLException e){}
			}
			if(stm != null){
				try{stm.close();}catch(SQLException e){}
			}
			if(conn != null){
				try{conn.close();}catch(SQLException e){}
				}
			
			}
		}
	
	
}

E aqui o actionPerformed() do botão cadastrar.

public void actionPerformed(ActionEvent e)  {
		if(e.getSource()== btCadastrar);
		
		
		
		codigo = textCod.getText();
		nome = textNome.getText();
		versao = textVersao.getText();
		finalidade = textFinalidade.getText();
		
		
		Sistema sistemaBean = new Sistema();
		
		sistemaBean.setCod(codigo);
		sistemaBean.setNome(nome);
		sistemaBean.setVersao(versao);
		sistemaBean.setFinalidade(finalidade);
		
		SistemaDAO dao = new SistemaDAO();
		dao.save(sistemaBean);
	}

4 Respostas

B

Pelo o que eu pude notar em seu código.

Você está fechando o PreparedStatement antes da consulta ser executada.

Feche PreparedStatement no final do método e não no meio.

moizheys

Seguinte, descobri dois erros: um no próprio código sql na variável INSERE_SISTEMA, ( tava com aspas onde nao precisava) outro era no botão “Cadastrar”, por isso não acontecia nada quando eu clicava no mesmo, como antes tava funcionando devo ter feito alguma iaca sem querer.
Bom, o detalhe é que eu acho que ele não ta nem pegando do Text, tentei fazer um teste imprimindo a String que guarda a entrada do text e nada. Bom outro indício é que se eu tentar cadastrar alguma coisa ele da um erro de sql dizendo que esta duplicado a alguma coisa, acredito pq em algum momento depois de faze algumas correções ele fez um cadastro em branco, agora toda vez que eu tento cadastrar novamente,ele diz que ta duplicado, obviamente pq não ta pegando os texts e esta tentando fazer um novo cadastro em branco. Sendo assim estou passando a parte da View para ver se vc descobre pq não ta pegando dos text.

package view;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import controller.Controlador;

public class CadastroUsuario extends JFrame implements ActionListener{
	
	private Container container;
	private GridBagLayout layout;
	private GridBagConstraints restricoes;
	private JLabel labelNome,labelCPF,labelTelefone,labelEmail,labelFuncao;
	private JTextField textNome,textCPF,textTelefone,textEmail;
	private JComboBox funcao;
	private JButton btVoltar,btCadastrar,btCancelar;
	private Object controller;
	
	
	public CadastroUsuario(){
	
	super("Cadastro Usuário");
	setSize(500, 500);
	
	
	
	container = getContentPane();
	layout = new GridBagLayout();
	container.setLayout(layout);
	restricoes = new GridBagConstraints();
	Controlador controlar = new Controlador();
	controlar.defineAcao(btVoltar);
	
	
	
	labelNome = new JLabel("Nome: ");
	labelCPF = new JLabel("CPF : ");
	labelTelefone = new JLabel("Telefone : ");
	labelEmail = new JLabel("Email : ");
	labelFuncao = new JLabel("Função : ");
	
	
	
	restricoes.fill = GridBagConstraints.BOTH;
	adicionarComponentes(labelNome, 1, 1, 1, 1);
	adicionarComponentes(labelCPF, 2, 1, 1, 1);
	adicionarComponentes(labelTelefone, 3, 1, 1, 1);
	adicionarComponentes(labelEmail, 4, 1, 1, 1);
	adicionarComponentes(labelFuncao, 5, 1, 1, 1);
	
	textNome = new JTextField(30);
	textCPF = new JTextField(11);
	textTelefone = new JTextField(15);
	textEmail = new JTextField(15);
	
	adicionarComponentes(textNome, 1, 2, 3, 1);
	adicionarComponentes(textCPF, 2, 2, 3, 1);
	adicionarComponentes(textTelefone, 3, 2, 3, 1);
	adicionarComponentes(textEmail, 4, 2, 3, 1);
	
	funcao = new JComboBox();
	
	adicionarComponentes(funcao, 5, 2, 2, 1);
	
	btVoltar = new JButton("Voltar");
	
	btCadastrar = new JButton("Cadastrar");
	btCancelar = new JButton("Cancelar");
	
	adicionarComponentes(btVoltar, 7, 1, 1, 1);
	adicionarComponentes(btCadastrar, 7, 2, 1, 1);
	adicionarComponentes(btCancelar, 7, 3, 1, 1);
	
	setVisible(true);
	
	}
	
	public static void main(String[] args) {
		
	new CadastroUsuario();
	}
	
	private void adicionarComponentes(Component componente,int linha,int coluna,int largura,int altura){
		
		restricoes.gridx = coluna;
		restricoes.gridy = linha;
		restricoes.gridwidth = largura;
		restricoes.gridheight = altura;
		
		layout.setConstraints(componente, restricoes);
		container.add(componente);
		
		}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource().equals(btVoltar)){
			
		}
		
	}
	

}

Os erros que estão dando agora são estes:

org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "sistema_pkey"
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1608)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1343)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:304)
	at dao.SistemaDAO.save(SistemaDAO.java:45)
	at view.CadastroSistema.actionPerformed(CadastroSistema.java:134)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Eh, isso, obrigado por responder…abç

moizheys

Foi mals…Na verdade passei a parte do código errado. A parte da view que eu estou tentando fazer é de cadastro de sistema, a que estou passando agora:

package view;



import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import model.Sistema;

import controller.Controlador;
import dao.SistemaDAO;

public class CadastroSistema extends JFrame implements ActionListener{
	
	private Container container;
	private GridBagLayout layout;
	private GridBagConstraints restricoes;
	private JLabel labelCod,labelNome,labelVersao,labelFinalidade;
	private JTextField textCod,textNome,textVersao,textFinalidade;
	
	private JButton btVoltar,btCadastrar,btCancelar;
	
	String codigo;
	String nome;
	String versao;
	String finalidade;
	
	public CadastroSistema(){
	
	super("Cadastro Sistema");
	setSize(500, 500);
	
	
	
	container = getContentPane();
	layout = new GridBagLayout();
	container.setLayout(layout);
	restricoes = new GridBagConstraints();
	
	
	labelCod = new JLabel("Código : ");
	labelNome = new JLabel("Nome: ");
	labelVersao = new JLabel("Versao : ");
	labelFinalidade = new JLabel("Finalidade : ");
	
	
	
	
	restricoes.fill = GridBagConstraints.BOTH;
	adicionarComponentes(labelCod, 1, 1, 1, 1);
	adicionarComponentes(labelNome, 2, 1, 1, 1);
	adicionarComponentes(labelVersao, 3, 1, 1, 1);
	adicionarComponentes(labelFinalidade, 4, 1, 1, 1);
	
	
	textCod = new JTextField(11);
	this.codigo = textCod.getText();
	
	
	textNome = new JTextField(30);
	this.nome = textNome.getText();
	textVersao = new JTextField(11);
	this.versao = textNome.getText();
	textFinalidade = new JTextField(15);
	this.finalidade = textFinalidade.getText();
	
	adicionarComponentes(textCod, 1, 2, 3, 1);
	adicionarComponentes(textNome, 2, 2, 3, 1);
	adicionarComponentes(textVersao, 3, 2, 3, 1);
	adicionarComponentes(textFinalidade, 4, 2, 3, 1);
	
	btVoltar = new JButton("Voltar");
	btCadastrar = new JButton("Cadastrar");
	btCadastrar.addActionListener(this);
	btCancelar = new JButton("Cancelar");
	
	
	
	adicionarComponentes(btVoltar, 6, 1, 1, 1);
	adicionarComponentes(btCadastrar, 6, 2, 1, 1);
	adicionarComponentes(btCancelar, 6, 3, 1, 1);
	
	setVisible(true);
	
	}
	
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
	new CadastroSistema();
	
	}
	
	private void adicionarComponentes(Component componente,int linha,int coluna,int largura,int altura){
		
		restricoes.gridx = coluna;
		restricoes.gridy = linha;
		restricoes.gridwidth = largura;
		restricoes.gridheight = altura;
		
		layout.setConstraints(componente, restricoes);
		container.add(componente);
		
		}

	@Override
	public void actionPerformed(ActionEvent e)  {
		if(e.getSource()== btCadastrar);
		
		Sistema sistemaBean = new Sistema();
		
		sistemaBean.setCod(codigo);
		sistemaBean.setNome(nome);
		sistemaBean.setVersao(versao);
		sistemaBean.setFinalidade(finalidade);
		
		SistemaDAO dao = new SistemaDAO();
		dao.save(sistemaBean);
		
		
		
	}
	

}

O erro é o já descrito na mensagem anterior.

moizheys
Pessoal, a princípio consegui resolver. Não estava capturando dos texts porque eu estava tentando capturar fora do acteonPerformed, não sei porque ainda, mas a verdade é que quando declarei as Strings capturando dentro do acteonPerformed funcionou. Bernardo, obrigado pela dica do preparedStatement, na verdade tava dando erro na hora da busca quando eu fechava o dito cujo antes do tempo. É isso  vou partir para as outras funcionalidades:

Pesquisa por nome;

Delete;

Update;

Também preciso criar um controle na hora da inserção. Qualquer dúvida ( e concerteza vai ter) eu posto de novoObrigado!!!
Criado 11 de março de 2009
Ultima resposta 16 de mar. de 2009
Respostas 4
Participantes 2