Conexao no banco no JCreator

3 respostas
YasminBeatriz

Pessoal, eu estou desenvolvendo uma pequena aplicação Java pra uma matéria do meu colégio, é um projeto de gerenciamento de CDs e ele consiste no cadastro e na consulta ao banco de dados. Estou usando o JCreator (que é o único software permitido) com banco de dados Postgres (o banco é livre pra escolher).

Eu sempre conectei com o postgres no NetBeans e nunca tive problema nenhum, mas no JCreator ele simplesmente não conecta, não mostra erro, não mostra nada, e quando eu clico no botão Cadastrar do executável, ele não faz nada, "não reage". O banco tá ok, já fiz INSERTs diretamente pelo pgAdmin III e funciona legal.

Será que é alguma coisa relacionada ao driver do postgres? No NetBeans, eu tive que adicionar o Driver ao projeto por meio de umas configurações, mas no JCreator não fiz nenhum procedimento parecido, fiz a conexão diretamente pelo código.

O Driver que eu estou usando (ou que pelo menos eu acho que estou usando) é esse: postgresql-9.1-902.jdbc3

Segue aí o codigo

Variáveis

public static Connection con;
public static Connection conecta;
public static Statement stm;
Função de conexao
public static Connection Conectar()
    {
    	String url = "jdbc:postgresql://localhost:5432/Rand_Albuns";
    	String usuario = "postgres";
        String senha = "123";
        
    	try
    	{
    		Class.forName("org.postgresql.Driver");         
    		con = DriverManager.getConnection(url, usuario, senha);
    		JOptionPane.showMessageDialog(null,"Conectou");	 
    	}
    	catch(Exception ex)
    	{
    		JOptionPane.showMessageDialog(null,"Erro"+ex.getMessage());
    	}
    	
    	return(con);
    }

evento ActionPerformed do botão de cadastrar

if(aevento.getSource() == btSalvar)
		{
			sano = (String)cbAno.getSelectedItem();
			snumfaixas = (String)cbFaixas.getSelectedItem();
			numfaixas = Integer.parseInt(snumfaixas);
			try
    		{
    			conecta = Conectar();
    			if(conecta != null)
    			{
	 				stm = conecta.createStatement();
 					stm.executeUpdate("INSERT into albuns (nome,artista,ano,gravadora,numero_faixas,genero,versao) values ('"+txtAlbum.getText()+"','"+txtCantor.getText()+"','"+sano+"','"+txtGravadora.getText()+"',"+numfaixas+",'"+(String)cbGenero.getSelectedItem()+"','"+(String)cbVersao.getSelectedItem()+"')");    		
    			}
    			else
    			{
    				JOptionPane.showMessageDialog(null,"Conexao sem retorno");
    			}
    		}
    		catch(Exception ex)
    		{
    			JOptionPane.showMessageDialog(null,"Não foi possivel inserir no banco"+ex.getMessage());
    		}
    		return;
		}

Todos os JOptionPanes do código, eles sequer aparecem quando eu executo o programa.
Alguem por favor poderia me ajudar? Eu preciso muito arrumar isso. Por favor! Já agradeço.

3 Respostas

M

.

lanlico
  1. Adiciona o jar no projeto. (http://jdbc.postgresql.org/documentation/head/index.html)

  2. Tenta colocar um cast (Conneciton) no DriverManager.

  3. Para fazer insert em banco de dados não utiliza concatenação de strings, pois trás alguns pontos negativos, como exemplo o clássico Joana D’arc (SQL Injection).
    Experimente values(?,?,?,?).

YasminBeatriz

Gente, agora funcionou, eu mudei de Statement para PreparedStatement como o lanlico disse, mas depois descobri que o problema de os JOptionPane nem aparecerem era o return(con) do Conectar(), que eu deveria ter colocado dentro do try-catch. Tá, as mensagens começaram a aparecer e eu pude me guiar para ver onde estava o problema. Finalmente pude descobrir que se tratava de um problema de conversao int para String, que nada tinha a ver com a conexão.

Eram dois valores, o ano e o numero de faixas, que eram JComboBox com números inteiros. E mesmo eu colocando no INSERT assim: (String)cmbFaixas.getSelectedItem() o Java não aceitava como String, dai foi só eu converter os valores para String que tudo se resolveu. Muito obrigada gente pela ajuda!

Criado 24 de agosto de 2012
Ultima resposta 25 de ago. de 2012
Respostas 3
Participantes 3