[Iniciante Java Web - SQL]

Boa tarde, sou iniciante na programção java web, estou fazendo um sistema com base em um curso online que contratei, no caso o professor esta fazendo um sistema para uma farmacia, e eu estou fazendo para um supermercado, no caso eu criei uma classe fornecedores:
package br.com.farmacia.domain;

public class Fornecedores {

private long codigo;
private String descricao; // nome
private String cnpj;

(gets and seters)

ai criei uma classe fornecedores dao , e o metodo salvar no banco:

public void salvar(Fornecedores f) throws SQLException{ // essa classe vai salvar os dados do domain no bd

	StringBuilder sql= new StringBuilder(); // concatena valores
  sql.append("INSERT INTO fornecedores ");
  sql.append("(descricao,cnpj) ");
  sql.append("VALUES(?,?) "); // 4 atributos
  
  
  Connection conexao = ConexaoFactory.conectar();
  
  PreparedStatement comando = conexao.prepareStatement(sql.toString());
  comando.setString(1, f.getDescricao());
  comando.setString(2, f.getCnpj());
  comando.executeUpdate();
  
}

ai eu chamei o main para fazer teste se esta realmente salvando no banco:

public static void main(String[] args) {

	Fornecedores f1= new Fornecedores(); 
	f1.setDescricao("coca-cola");
	Fornecedores f2= new Fornecedores();
	f2.setCnpj("231-21323");


	FornecedoresDAO fdao = new FornecedoresDAO();

	try{
fdao.salvar(f1);
fdao.salvar(f2);



System.out.println("salvo com sucesso");
	} catch (SQLException e){
		System.out.println("Erro ao salvar");
	e.printStackTrace();
	} 

porem, sempre que eu vou executar, da a seguinte mensagem ::

Erro ao salvar
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column ‘cnpj’ cannot be null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:934)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5098)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
at br.com.farmacia.DAO.FornecedoresDAO.salvar(FornecedoresDAO.java:26)
at br.com.farmacia.DAO.FornecedoresDAO.main(FornecedoresDAO.java:164)

sendo que no meu banco de dados a coluna cnpj esta como not null, e eu não faço a minima ideia do que esta acontecendo :s help !!!

por favor se eu estiver falando alguma merda, ignorem, sou iniciante ainda :stuck_out_tongue: valeu !

No banco cnpj está como not null e no f1 você não deu set no cnpj.

1 curtida

Olá,
Concordo com o nosso amigo Julio Cesar, o erro foi na declaração do seu Fornecedor, quando você diz ao banco que coluna “abc” não pode ser nula você é obrigado a passar algum valor como parâmetro.
Prefiro criar um construtor com parâmetros que preciso ao invés de usar o set…

public Fornecedor (String descricao, String cnpj) {
		this.descricao = descricao;
		this.cnpj = cnpj;
	}

Você instancia esse cara assim:

Fornecedor fornecedor = new Fornecedor("Empresa LTDA","00.000.000/0000-00");
1 curtida

Obrigado amigo, me ajudou muito, agora estou com um outro problema

"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘codigo’ in ‘field list’ " estava fazendo o metodo para listagem de dados usando uma classe com o unit para test, afirmou que a columa codigo nao existe ? mas eu tenho ela criada :S

Coloca aqui o método que faz o select.