Ajuda com jdbc

oi pessoal
criei estas tres classes para manipulação via JDBC
(banco em anexo)

quando tento inserir diz que nome não pode ser nulo:

java.sql.SQLException: Column 'nome' cannot be null

será que alguem pode me ajudar
agradeço desde já

CLASS CONFIG

[code]package candx;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import candx.View;

@SuppressWarnings(“unused”)
public class Config{

//um cliente
Cliente client = new Cliente();


//conecta
public Connection conectar() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException{
	Class.forName("com.mysql.jdbc.Driver");
	return DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");
}


//insere
public void inserir(Cliente c) throws InstantiationException, IllegalAccessException{
	try{
	Connection con = conectar();
	
	int idade= client.getIdade();
	String nome = client.getNome();
	String prof = client.getProfissao();
	
	PreparedStatement stm = con.prepareStatement("insert into banco(idade, nome, profissao)values(?,?,?)");//APONTA ERRO POR AQUI
	stm.setInt(1,idade);
	stm.setString(2,nome);
	stm.setString(3,prof);
	stm.executeUpdate();
	//stm.close();
	}
	
	catch(SQLException sqlEx){
		sqlEx.printStackTrace();
	}
	catch(ClassNotFoundException not){
		not.printStackTrace();
	}
}


//consulta
public void consultar(Cliente c) throws InstantiationException, IllegalAccessException{
	try{
		Connection con = conectar();
		Statement stm = con.createStatement();
		String sql = "select * from banco";
		ResultSet rs = stm.executeQuery(sql);
		
			while(rs.next()){
				System.out.println(rs.getString("idade") +  "\n" + rs.getString("nome")+"\n"+ rs.getString("profissao"));
			}
	}
	catch(ClassNotFoundException not){
		not.printStackTrace();
	}
	catch(SQLException sqlEx){
		sqlEx.printStackTrace();
	}
}


//atualiza
public void atualizar(Cliente c) throws InstantiationException, IllegalAccessException{
	try{
		Connection con = conectar();
		PreparedStatement stm = con.prepareStatement("update banco set idade='"+client.getIdade()+"', nome='"+client.getNome()+"', profissao='"+client.getProfissao()+"' where idade = '"+client.getIdade()+"'");
		//stm.clearParameters();
		stm.executeUpdate();
		//stm.close();
	}
	catch(SQLException sqlEx){
		sqlEx.printStackTrace();
	}
	catch(ClassNotFoundException not){
		not.printStackTrace();
	}
}


//exclui
public void apagar(Cliente c) throws InstantiationException, IllegalAccessException{
	try{
		Connection con = conectar();
		PreparedStatement stm = con.prepareStatement("delete from banco where nome =?");
		stm.setString(1,client.getNome());
		stm.executeUpdate();
	}
	catch(SQLException sqlEx){
		sqlEx.printStackTrace();
	}
	catch(ClassNotFoundException not){
		not.printStackTrace();
	}
}

}
[/code]

CLASS VIEW

package candx;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class View extends Config{

	public JFrame f;
	
	public JTextField idade;
	public JTextField nomee;
	public JTextField profissao;
	
	public JButton inserir;
	public JButton listar;
	public JButton update;
	public JButton delete;
	
	public JPanel p1;
	public JPanel p2;
	
	public Cliente client = new Cliente();
	public Config conf = new Config();
	
	
	//MAIN
		public static void main(String[] args) {
			View v = new View();
			v.init();
		}
	
	
	public void init(){
	    
		f = new JFrame();
		p1 = new JPanel();
		
		nomee = new JTextField(10);
		nomee.requestFocus();
	
		idade = new JTextField(10);
		idade.requestFocus();
		
		profissao = new JTextField(10);
		profissao.requestFocus();
		
		p1.add(nomee);
		p1.add(idade);
		p1.add(profissao);
		
		p2 = new JPanel();
		inserir = new JButton("inserir");
		inserir.addActionListener(new Insere());
		
		listar = new JButton("listar");
		listar.addActionListener(new Lista());

		update = new JButton("update");
		update.addActionListener(new Atualiza());
		
		delete = new JButton("delete");
		delete.addActionListener(new Apaga());
		
		p2.add(inserir);
		p2.add(listar);
		p2.add(update);
		p2.add(delete);
		
		f.getContentPane().add(p1,BorderLayout.CENTER);
		f.getContentPane().add(p2,BorderLayout.SOUTH );
		f.setSize(600,400);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLocation(200,200);
		f.setVisible(true);
		
		
	}
	
	public class Insere implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			    try{
				inserir(client);
			    JOptionPane.showMessageDialog(null,"inserido com sucesso");
			    }
			    catch(Exception ex){
			    	ex.printStackTrace();
			    	System.out.println(ex.getMessage());
			    }
	    }
	}
	
	public class Lista implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			try {
				consultar(client);
			} catch (InstantiationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			//consulta banco
		}
	}
	
	public class Atualiza implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			try {
				atualizar(client);
			} catch (InstantiationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			JOptionPane.showMessageDialog(null, "atualizado com sucesso");
		}
	}
	
	 public class Apaga implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			try {
				apagar(client);
			} catch (InstantiationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			JOptionPane.showMessageDialog(null, "excluidos do banco");
		}
	}
	

	
}

CLASS CLIENT

[code]package candx;

public class Cliente{

private int idade;
private String nome;
private String profissao;

/*public Client(String n, int id, String p){
	this.nome = n;
	this.idade = id;
	this.profissao = p;
}*/


public int getIdade() {
	return idade;
}

public void setIdade(int idade) {
	this.idade = idade;
}

public String getNome() {
	return nome;
}

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

public String getProfissao() {
	return profissao;
}

public void setProfissao(String profissao) {
	this.profissao = profissao;
}

@Override
public boolean equals(Object o) {
	if(o instanceof Cliente && ((Cliente)o).idade==this.idade){
		return true;
	}else{
		return false;
	}
}

@Override
public int hashCode() {
	return this.idade * 7;
}

/*@Override
public int compareTo(Object o) {
	return this.idade.compareTo(((Client)o).idade);

}*/

public String toString(){
	return "idade: " + idade + "nome: " + nome + "profissão: " + profissao  ;
}

}
[/code]

Repara nessa classe:

//. . .
@SuppressWarnings("unused")  
public class Config{  
      
      
    //um cliente  
    Cliente client = new Cliente();  
      
      
    //conecta  
    public Connection conectar() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException{  
        Class.forName("com.mysql.jdbc.Driver");  
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");  
    }  
      
      
    //insere  
    public void inserir(Cliente c) throws InstantiationException, IllegalAccessException{  
        try{  
        Connection con = conectar();  
          
        int idade= client.getIdade();  
        String nome = client.getNome();  
        String prof = client.getProfissao(); 
// . . .

o metodo inserir, e os demais metodos da classe, têm um argumento Cliente c, o argumento é c, mas vc usou client, que tem null no nome e na profissão, e tem 0 na idade. Por isso, o problema.

Substitua

// . . .
int idade= client.getIdade();  
String nome = client.getNome();  
String prof = client.getProfissao(); 
// . . .

por:

// . . .
int idade= c.getIdade();  
String nome = c.getNome();  
String prof = c.getProfissao();  //sendo c a variável passada como argumento
// . . .

Bom dia.

Provavelmente, o valor que está setando em ‘?’ é nulo, ou seja, uma string null.
O banco não está permitindo que este valor seja persistido na tabela.

Faça um debug simples, após extrair o valor de ‘nome’ do seu objeto, dê um System.out nele, para verificar seu conteúdo.
Abraços.

troquei o argumento.
não funcionou
:frowning:

você faz referência a uma instância de Cliente

[code]
//…

public class Insere implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
    try{
        inserir(client);

// …

public class Lista implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
    try {
        consultar(client);

// …

public class Atualiza implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
    try {
        atualizar(client);

// …

public class Apaga implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
    try {
        apagar(client);

// …[/code]
instanciou o client

[code]// …

public JPanel p1;
public JPanel p2;

public Cliente client = new Cliente();
// …[/code]
mas não atribuiu nenhum valor ao atributo nome, ou a outro atributo da instância criada.

atribui na classe config

Colega, por favor, qual o resultado do System.out da variavél nome quando você invoca o método inserir?

Grato.

[quote=vectorb]atribui na classe config
[/quote]
tem certeza?

acho que você confundiu alguma coisa.

tente fazer isso na classe Config…

// ... String nome = client.getNome(); // ... System.out.println(nome); // ...
… e veja o resultado

dá null

tentei usar uma instancia de Cliente
e tentei tbm instanciar o parametro c do emtodo inserir

ambos derem null

mando o projeto inteiro em anexo

null java.sql.SQLException: Column 'nome' cannot be null at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571) at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1124) at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:676) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1166) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1082) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1067) at candx.Config.inserir(Config.java:46) at candx.View$Insere.actionPerformed(View.java:96) 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)

Exatamente colega, como eu havia dito lá no inicio.
A questão não é instanciar o Cliente no método Inserir, ali, deve-se já possuir um Cliente instanciado e com valores preenchidos.
String não é um tipo primitivo e sim um Objeto (não vamos entrar em detalhes), portanto, quando você instancia um Objeto (Cliente) que possui uma String, ele atribui um valor default, ou seja, ‘null’.

Logo, você tentar persistir em uma string do seu banco um valor ‘null’ e gera a exceção.
No seu método inserir, ao invés de usar ‘cliente.getNome()’ use ‘c.getNome’, que é o nome do objeto que o método inserir está recebendo.
Se persistir a gerar ‘null’, é porque em algum ponto do seu sistema, você não está preenchendo o objeto cliente! Simplesmente está passando uma instancia dele.

O certo, seria algo assim:

Cliente cliente = new Cliente(); cliente.setNome("João da Silva"); //chama o método inserir x.inserir(cliente);

Este é um caso em que quando você efetuar o ‘c.getNome’ e NÃO ‘cliente.getNome()’ terá um valor preenchido.
Abraços.

java.sql.SQLException: Column ‘nome’ cannot be null