Erro ao Salvar TextField no banco de dados[Resolvido]

9 respostas
M

Olá pessoal estou usando o postgre, me conecto no banco normal mas não estou conseguindo salvar as informações no banco através de um botao que chama o metodo inserir!

public void Insere() {
		Statement St1;
		int v;
				
		try {
			
			String query="INSERT INTO clientes(nome,idade,sexo)";
	 						
			St1=Cnt1.createStatement();
			v=St1.executeUpdate(query);
						
			
			if (v==1){
								
	St1.executeUpdate("insert into clientes(nome,idade,sexo) values ("+nomec.getText()+","+idadec.getText()+",sexoc.getText()"); 
	JOptionPane.showMessageDialog(null,"Cadastro realizado com sucesso...");
			
			}
			else
			  
			System.out.println("Falha na inserção!\n");
				
			St1.close();
		} catch (SQLException Sqlex) {
	
			Sqlex.printStackTrace();
		};
	};

dessa maneira nao está dando certo, se alguem puder me dar uma ajuda agradeço!

9 Respostas

difosal

… (’"+nomec.getText()+"’, …
falta as aspas simples no caso dos campos varchar ou de textos

difosal

e o seu primeiro insert
INSERT INTO clientes(nome,idade,sexo)

ta faltando os valores ai vai da pal de sql!!!

M

Ta dando esse erro do evento, o que seria?

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

at cadastro_cliente.Insere(tela.java:267)

at cadastro_cliente$1.actionPerformed(tela.java:297)

at java.awt.AWTEventMulticaster.actionPerformed(Unknown Source)

at java.awt.Button.processActionEvent(Unknown Source)

at java.awt.Button.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$000(Unknown Source)

at java.awt.EventQueue$1.run(Unknown Source)

at java.awt.EventQueue$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$2.run(Unknown Source)

at java.awt.EventQueue$2.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(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)
difosal

se ele ta dando null pointer antes de dar pal no sql o Cnt1 deve estar null

M
public void Insere() {
		Statement St1;
		int v;
				
				
		try {
			
		System.out.println("Passei aqui\n");
			 		
		St1=Cnt1.createStatement();  
						
								
	St1.executeUpdate("INSERT INTO clientes(codigo,nome,idade,sexo) values ("+codigoc.getText()+",     '"+nomec.getText()+"',      "+idadec.getText()+",    '"+sexoc.getText()+"'");           
	JOptionPane.showMessageDialog(null,"Cadastro realizado com sucesso...");
			
		
		} catch (SQLException Sqlex) {
	
			Sqlex.printStackTrace();
		};
	};

Deve ser, porque ele entra no try imprime a mensagem “passei aqui”, e quando chega no St1=Cnt1.createStatement(); acontece isso!

difosal

faltou fechar no sql o parenteses do values

posta o código da sua classe Cnt1 ou tenta dar um print nele pra ver se esta null

M

Essa é a classe do fomulário …abaixo tem a outra que faz conexão com o banco!

class cadastro_cliente extends Frame{
	
	private Button salvar;
	private Label nome,idade,titulo_c,sexo,codigo;
	private TextField nomec,idadec,sexoc,codigoc;
	private Connection Cnt1;
	
	public cadastro_cliente(){
		
		super("Tela de Cadastro");
		init();
		init_event_salvar();
		init_event_close();
	}
		public void aloca(){
			
			//titulo
			titulo_c.setBounds(160,40,190,20);
			
			//nome/idade
			nome.setBounds(10,90,100,20);
			idade.setBounds(10,120,100,20);
			
			//nome idade textFild
			nomec.setBounds(120,90,250,20);
			idadec.setBounds(120,120,30,20);
			sexoc.setBounds(120,150,20,20);
			codigoc.setBounds(120,180,20,20);
			
			//aloca botao
			salvar.setBounds(200,190,60,30);
			
			//aloca sexo
			sexo.setBounds(10,150,100,20);
			codigo.setBounds(10,180,100,20);
			
			
			
		}

	public void init(){
		
		setResizable(false);
		setVisible(true);
		setLayout(null);
		
		titulo_c = new Label("Cadastro do Cliente");
		titulo_c.setBackground(Color.gray);
		titulo_c.setFont(new Font("Dialog", Font.PLAIN, 20)); 
		titulo_c.setAlignment(titulo_c.CENTER);
		add(titulo_c);
		
		nome = new Label("Nome");
		nome .setBackground(Color.green);
		nome .setAlignment(nome .CENTER);
		nome .setFont(new Font("Dialog", Font.PLAIN, 16)); 
		add(nome );
		
		idade = new Label("Idade");
		idade .setBackground(Color.green);
		idade .setAlignment(idade .CENTER);
		idade .setFont(new Font("Dialog", Font.PLAIN, 16)); 
		add(idade );
		
		sexo = new Label("Sexo");
		sexo .setBackground(Color.green);
		sexo .setAlignment(sexo .CENTER);
		sexo .setFont(new Font("Dialog", Font.PLAIN, 16)); 
		add(sexo);
		
		codigo = new Label("Código");
		codigo  .setBackground(Color.green);
		codigo  .setAlignment(sexo .CENTER);
		codigo  .setFont(new Font("Dialog", Font.PLAIN, 16)); 
		add(codigo );
		
		nomec = new TextField();
		add(nomec);
		
		idadec = new TextField();
		add(idadec);
		
		sexoc = new TextField();
		add(sexoc);
		
		codigoc = new TextField();
		add(codigoc);
		
		salvar = new Button("Salvar");
		salvar.setBackground(Color.orange);
		add(salvar);
		
		aloca();
		init_event_salvar();
		init_event_close();
		
	}
	
	//#################### JDBC ##########################
	
 void Insere() {
		
	 Statement St1;
				
		try {
			
			
	 		System.out.println("Passei Aqui...\n");
			St1=Cnt1.createStatement();
					
			
			St1.executeUpdate("INSERT INTO clientes(codigo,nome,idade,sexo) values ( "+codigoc.getText()+",     '"+nomec.getText()+"',      "+idadec.getText()+",    '"+sexoc.getText()+"'");           
			JOptionPane.showMessageDialog(null,"Cadastro realizado com sucesso...");
			
		
		} catch (SQLException Sqlex) {
				Sqlex.printStackTrace();
		};
	};
	
	
	
	public void init_event_salvar() {

		salvar.addActionListener(
			new ActionListener() {
				public void actionPerformed(ActionEvent AE1) {
					
				Insere();
								
				}
			}
		);
	}
	
	
	
	
	
	
public void init_event_close() {
		
		this.addWindowListener(
			new WindowAdapter() {
				public void windowClosing(WindowEvent WE1) {
					
					hide();
										
				}
			}
		);
	}
	
public void paint(Graphics g) {
		
		this.setBackground(Color.red);
				    
	};
	
}

Faz conexao com o banco

import java.sql.*;

class Jdbc  {
	private Connection Cnt1;
	
	public Jdbc() {
		
	};
	

	
	public void Abre_Conexao(String Url, String Usuario, String Senha) {
		
		try {
						
			Class.forName("org.postgresql.Driver");
			Cnt1=DriverManager.getConnection(Url,Usuario,Senha);	
			System.out.println("\nConexão com Banco de Dados Estabelecida!!!");
			
		} catch (ClassNotFoundException Cnfe) {
			System.out.println("Falha na carga do driver JDBC/ODBC.");
			Cnfe.printStackTrace();
			System.exit(1);
		} catch (SQLException Sqlex) {
			System.out.println("Incapaz de conectar.");
			Sqlex.printStackTrace();
		};
	};
	
	/**
	
	
public void Fecha_Conexao() {
		
		try {
			Cnt1.close();
		} catch (SQLException Sqlex) {
			System.out.println("Incapaz de desconectar");
			Sqlex.printStackTrace();
		};
	};
	
};

e essa é principal chamando as classes

class principal  {
	public static void main(String args[]) {
			
		
		Jdbc con = new Jdbc();
                cadastro_cliente J3 = new cadastro_cliente();
		
		con.Abre_Conexao("jdbc:postgresql://127.0.0.1:5432/controle","postgres","a");	
		J3.init();
	
		
	}	
}
difosal

Entao cara!!!
na classe principal você ta conectando no banco tudo certinho problema q na sua classe da de cadastro_cliente vc esta criando outro Connection que nao é o mesmo que vc criou no principal.
quando ele tenta criar statment o connection q vc ta usando nao esta conectado no banco

M

Consegui resolver…era isso mesmo! so armazenei em uma string e passei por parametro pra class Jdbc…e deu certo…
Obrigado!

Criado 17 de junho de 2011
Ultima resposta 17 de jun. de 2011
Respostas 9
Participantes 2