Problemas para salvar dados no PostgresSQL ( Resolvido)

4 respostas
moizheys

Seguinte pessoal. Criei um sisteminha básico apenas para treinar esta conexão do java com o postgres. A conexão já está ok mas estou com problemas na hora de inserir os dados. ? O programinha irá inserir quatro colunas em um banco chamado "sistema".
O que eu tenho:
Para a inserção eu estou usando 3 classes.
A classe "AlterarSistema que é a view.
A classe Sistema que é os Beans com todos seus gets e sets, e a classe SistemaDAO que seria responsável por fazer a conexão e todas as consultas sqls. Mais pra frente pretendo implementar uma classe para controlar as ações mas por hora quero testar assim mesmo.
O que eu estou fazendo:
No Action Listener que controla a ação do botão cadastrar, eu pego os textos digitados nos Texts através do getText() e salvo em uma String e já seto nos Beans. Chamo a classe SistemaDAO que teoricamente teria que dar um "get" nos Beans e passar pro BAnco de dados. Galera como sou aprendiz em java não sei a lógica está legal , se alguém tiver sugestões de estruturas melhores eu aceito.
O problema: quando eu chamo o construtor SistemaDao da um erro de exceção, como o eclipse me da algumas sugestões pra declarar no actionListener eu tento mas mesmo assim não funciona. Tentei não chamar o SistemaDAO no ActionListener e sim executar primeiro o ActionListener para carregar os Benas e depois o SistemaDAO para finalizar o processo, apenas para testar mas não deu muito certo aí o erro acontece no local onde chamo os Beans.
O código relacionado a esta parte segue abaixo, se alguém puder me ajudar fico grato...
A ação:
[/code]
[color=blue]public void actionPerformed(ActionEvent e) throws Exception, SQLException {
if(e.getSource()== btCadastrar);
codigo = textCod.getText();
nome = textNome.getText();
versao = textVersao.getText();
finalidade = textFinalidade.getText();
sistemaBean.setCod(codigo);
sistemaBean.setNome(nome);
sistemaBean.setVersao(versao);
sistemaBean.setFinalidade(finalidade);
new SistemaDAO();

}
[/color]

Os Beans:

[code]

package model;

public class Sistema {

private String cod;
private String nome;
private String versao;
private String finalidade;

public Sistema(){

}

public String getCod(){
return cod;
}

public void setCod(String s){
this.cod = s;
}

public String getNome(){
return nome;
}

public void setNome(String s){
this.nome = s;
}

public String getVersao(){
return versao;
}

public void setVersao(String s){
this.versao = s;
}

public String getFinalidade(){
return finalidade;
}

public void setFinalidade(String s){
this.finalidade = s;
}

}

A conexão:

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 String url ="jdbc:postgresql://localhost:5432/CADASTRO";
private Connection con;
private PreparedStatement stm;
private Sistema sistemaBean;

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 SistemaDAO() throws ClassNotFoundException, SQLException{

try{
Class.forName("org.postgresql.Driver");
Connection con = DriverManager.getConnection(url, "postgres","root");
System.out.println("Conectado! ");
stm = con.prepareStatement(INSERE_SISTEMA);


stm.setString(1,sistemaBean.getCod());
stm.setString(2,sistemaBean.getNome());
stm.setString(3,sistemaBean.getVersao());
stm.setString(4,sistemaBean.getFinalidade());


ResultSet insert = stm.executeQuery();

//Teste
ResultSet resultado = stm.executeQuery(PESQUISA_SISTEMA);
while(resultado.next()){
String codigo = resultado.getString("cod_bd");
String nome = resultado.getString("nome_bd");
String versao = resultado.getString("versao_bd");
String finalidade = resultado.getString("finalidade_bd");
System.out.println(codigo+" , " + nome + " , " + versao + " , " + finalidade);
}
}

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

}

4 Respostas

mario.fts

bom, tem vários erros, mas vamos por partes (como diria Jack)

alterando sua classe dao

package dao;

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

import model.Sistema;

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 qtd = stm.executeUpdate();
			System.out.println("foram inseridos " + qtd);
			stm.close();
			
			//Consultando
			
			rs = stm.executeQuery(PESQUISA_SISTEMA);
			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 (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			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 vc altera seu Listener pra usar assim:

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);
}

Tem muito mais coisa pra alterar, mas eu só dei uma acertada rápida.

da uma lida nessas apostilas aqui, elas são ótimas pra quem ta começando, pra pegar os conceitos da linguagem:

http://www.caelum.com.br/apostilas/

[]'s

moizheys

Em primeiro lugar queria agradecer pela resposta, e pela paciência em dar uma olhada no trambolho, rsss. Valeu pela dica, vou dar uma olhada nas apostilas, mas pretendo também aprender praticando e contando com a ajuda de quem entende do assunto, acho mais fácil pra suprir a inexperiência em interação dos objetos.
Bom, quanto ao problema em questão, fiz as alterações que você tinha feito e ainda assim tenho um problema no ActionPerformed:
A última linha quando eu chamo o método save, gera a excessão “Unhandled exeption type ClassNotFoundException”

SistemaDAO dao = new SistemaDAO(); dao.save(sistemaBean);

Bom utilizando a primeira dica que o Eclipse sugere: “Add Throws Execption” , ainda sim aparece a excessão no cabeçalho do ActionPerformed : "Exception ClassNotFoundException is not compatible with clause in ActionListener.actionPerformed(ActionEvent e).
Utilizando a segunda dica do Eclipse: “Surround with try/catch”, gera o seguinte tratamento:

SistemaDAO dao = new SistemaDAO(); try { dao.save(sistemaBean); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }

E gera a seguinte excessaõ: " The method save(Sistema) is undefined for the type SistemaDAO".
Quando eu tento rodar o sistema assim mesmo, simplesmente não acontece nada.
Sabe como posso tratar isto?

mario.fts

engraçado, não era pra dar esses erros.

bom, eu realizei um teste aqui pra confirmar, e acabei achando outros erros, fiz umas correções.

tenta de novo, trocando só o conteúdo da classe SistemaDAO.

segue:
package dao;

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

import model.Sistema;

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 qtd = stm.executeUpdate();
			System.out.println("foram inseridos " + qtd);
			stm.close();

			// Consultando

			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 (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			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) {
				}
			}

		}

	}

}

qq coisa responde ae.

[]

moizheys

Bom, se eu nao estou enganado, vc modificou agora apenas as linhas 45 e 46, isto? Bem, a principio o erro que estava dando não está aparecendo mais, no entanto, quando eu faço o teste, abro a tela, carrego os “texts” e clico no botão “cadastrar” simplesmente não acontece nada, nem a mensagem de “Conectado” não imprime mais, também não da nenhuma mensagem de erro.

Criado 5 de março de 2009
Ultima resposta 9 de mar. de 2009
Respostas 4
Participantes 2