Problema ao inserir dados String no Campo Int do SQL [RESOLVIDO]

11 respostas
M

Boa noite javamaniacos.

Estou com um problema que pode ou não ser simples.

Estou com problemas ao inserir uma String da JCOMBOBOX no valor do Campo INT do mysql

Ja tentei fazer um cast e não consegui e sempre me da esse erro

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "Jd penha"
at java.lang.NumberFormatException.forInputString(Unknown Source)

Segue os codigos

da classe DAO

package br.com.impacta.cliente.repository.jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Set;
import java.util.TreeSet;
import java.sql.PreparedStatement;

import javax.swing.JOptionPane;

import br.com.impacta.cliente.domain.exception.BairroException;
import br.com.impacta.cliente.domain.model.Bairro;
import br.com.impacta.cliente.domain.model.Municipio;
import br.com.impacta.cliente.domain.model.UFVO;
import br.com.impacta.cliente.repository.BairroDAO;
import br.com.impacta.cliente.repository.exception.DataBaseException;

public class DefaultBairroDAO implements BairroDAO {

	@Override
	public void inserir(Bairro domain) throws BairroException {
		Connection connection;
		PreparedStatement query;
		String sql;

		try { // abrir conexão

			connection = DataSource.getConnection();
			sql = "INSERT INTO bairro (nm_bairro,id_municipio)VALUES  (?,?)";

			try {
				// criando consulta
				query = connection.prepareStatement(sql);

				// preparando consulta
				query.setString(1, domain.getNome());
				query.setString(2, domain.getMunicipio().toString());

			
				
				// executar a consulta
				int rows = query.executeUpdate();

				// tratar os resultados
				if (rows == 0) {
					throw new BairroException("Deveria ter inserido");

				}

			} catch (SQLException cause) {
				throw new BairroException("PROBLEMAS AO INSERIR BAIRRO", cause);

			} finally {
				// fechar conexão
				DataSource.close(connection);
			}

		} catch (DataBaseException cause) {
			throw new BairroException(cause);

		}

	}

Segue os dados da classe do botão Ok

package br.com.impacta.cliente.app.action.bairro;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import br.com.impacta.cliente.app.view.CadastroBairroView;
import br.com.impacta.cliente.domain.model.Bairro;
import br.com.impacta.cliente.domain.model.Entidade;
import br.com.impacta.cliente.domain.model.Municipio;
import br.com.impacta.cliente.domain.model.UFVO;
import br.com.impacta.cliente.service.BairroService;
import br.com.impacta.cliente.service.impl.DefaultBairroService;

public class BairroOkAction implements ActionListener {

	private JComboBox<Object> municipioJComboBox;
	private JTextField nomeJTextField;
	private JTable bairrosJTable;
	private CadastroBairroView view;

	public BairroOkAction(JComboBox<Object> municipioJComboBox,
			JTextField nomeJTextField, JTable bairrosJTable,
			CadastroBairroView view) {
		super();
		this.municipioJComboBox = municipioJComboBox;
		this.setNomeJTextField(nomeJTextField);
		this.bairrosJTable = bairrosJTable;
		this.view = view;

	}

	@Override
	public void actionPerformed(ActionEvent e) {

		String NomeBairro = view.getNomeJTextField().getText();
		String municipio = (String) view.getMunicipioJComboBox().getSelectedItem();
		
		int i = Integer.parseInt(municipio);
		
		
		

		Bairro domain;

		try {
			if (view.getaAlterar() != null) {
				domain = (Bairro) view.getaAlterar();

			} else {
				domain = new Bairro();
			}

			domain.setNome(NomeBairro);
			domain.setMunicipio(new Municipio(municipio));
           
           
			view.getService().validar(domain);
			view.getService().salvar(domain);

		} catch (Exception cause) {
			cause.printStackTrace();
			JOptionPane.showMessageDialog(view, "erro ao carregar");
		}

	}

Se alguem puder me ajudar fico agradecido

11 Respostas

C

Amigo, se a coluna no MySql é INT, certifique-se de passar um INT.

query.setString(1, domain.getNome()); query.setString(2, domain.getMunicipio().toString());

Quando for INT utilize:

query.setInt

e passe um valor INT e não uma String…

Abraços!

M

Eu fiz isso e olha o que aconteceu.

[img]

[/img]

M
Se for assim também da o mesmo erro.

	query.setString(1, domain.getNome());
               query.setInt(2, domain.getId());
R

[i]Cara, vc ta passando texto, INT = Integer = inteiro = Número;

RS Não é um número :smiley:
[/i]

V

Por que você não tem objetos da classe Bairro dentro da JComboBox ao invés de Strings? Por que ali no seu código, você está pegando a String e criando um bairro novo: tem certeza que esse bairro criado tem todos os valores necessários para essa inserção?

O ideal seria preencher o JComboBox com objetos da classe Bairro diretamente.

M

Entendi Vini… como eu faria isso?

M

Tentei fazer assim no Bairro Ok Action

public void actionPerformed(ActionEvent e) {

		String NomeBairro = view.getNomeJTextField().getText();
		Object municipio = ( new Municipio()) ;
		view.getMunicipioJComboBox().addItem(municipio);
		view.getMunicipioJComboBox().getSelectedObjects();
		Bairro domain;

		try {
			if (view.getaAlterar() != null) {
				domain = (Bairro) view.getaAlterar();

			} else {
				domain = new Bairro();
			}

			municipio = new Object();
			
			domain.setNome(NomeBairro);
			
			domain.setMunicipio(new Municipio());
			
			

		
	
           

			view.getService().validar(domain);
			view.getService().salvar(domain);




Depois mechei no Bairro DAO deixando assim..


	try {
				// criando consulta
				query = connection.prepareStatement(sql);

				// preparando consulta
				query.setString(1, domain.getNome());
				query.setObject(2, domain.getId());
               
				// executar a consulta
				int rows = query.executeUpdate();
				



o errou mudou .. mas diz que Municipio está nulo


Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'municipio_id' cannot be null
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
C

Provavelmente domain.getId() está retornando null, por isso o erro. Utilize setInt e não setObject…

M

Humm pode ser .

Por que assim pessoal…

A classe Bairro tem as variasveis

public class Bairro extends Entidade<Integer> implements Serializable,
		Comparable<Bairro> {


private String nome  > que sera o nome do bairro
private  Municipio municpio > que sera o nome do municipio

tenho os construtores padroes e um super.

Sendo assim essa é a classe bairro e os outros atributos e etc.


a Classe CadastrobairroView  que é onde está os objetos e codigos



public class CadastroBairroView extends JDialog {

	private static final long serialVersionUID = -2761006226478866005L;

	private JComboBox<Object> ufJComboBox;
	private JComboBox<Object> municipioJComboBox;
	private JTextField nomeJTextField;
	private JTable bairrosJTable;
	private JButton okJButton;
	private Object aAlterar = null;
	private BairroService service;




private void initcombobox() {

		try {
			try {
				Class.forName("com.mysql.jdbc.Driver");

			} catch (ClassNotFoundException ex) {
				ex.printStackTrace();
			}

			Connection connection = (Connection) DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/cliente-db", "impacta",
					"impacta");
			Statement query = (Statement) connection.createStatement();

			String sql = "SELECT * FROM municipio ";

			ResultSet rs = query.executeQuery(sql);

			List<Municipio> lisMunicipios = new ArrayList<Municipio>();

			while (rs.next()) {
				Municipio municipio = new Municipio();

				municipio.setNome(rs.getString("id_uf"));
				ufJComboBox.addItem(rs.getString("id_uf")); --> mostra na comcobox UF 
				 municipioJComboBox.addItem(rs.getObject("nm_municipio")); -- > mostra na combobox Municipio

				lisMunicipios.add(municipio);

			}

		} catch (SQLException cause) {
			cause.printStackTrace();
			JOptionPane.showMessageDialog(null, "Não foi possivel Carregar");

		}

	}





na classe BairroOkAction



@Override
	public void actionPerformed(ActionEvent e) {
		Bairro domain;

		String NomeBairro = view.getNomeJTextField().getText();
		Bairro selecionado = (Bairro) view.getMunicipioJComboBox().getSelectedItem();

		try {
			if (view.getaAlterar() != null) {
				domain = (Bairro) view.getaAlterar();

			} else {
				domain = new Bairro();
			}

			domain.setNome(NomeBairro);
			domain.setMunicipio(new Municipio());

			view.getService().validar(domain);
			view.getService().salvar(domain);

		} catch (Exception cause) {
			cause.printStackTrace();
			JOptionPane.showMessageDialog(view, "erro ao carregar");
		}

	}





na classe Bairro DAO

@Override
	public void inserir(Bairro domain) throws BairroException {
		Connection connection;
		PreparedStatement query;
		String sql;

		try { // abrir conexão

			connection = DataSource.getConnection();
			sql = "INSERT INTO bairro (nm_bairro,municipio_id)VALUES  (?,?)";

			try {
				// criando consulta
				query = connection.prepareStatement(sql);

				// preparando consulta
				query.setString(1, domain.getNome());
query.setObject(2, domain.getMunicipio().getId());
               
				// executar a consulta
				
							
				
				int rows = query.executeUpdate();
				

				// tratar os resultados
				if (  rows == 0) {
					throw new BairroException("Deveria ter inserido");

				}

			} catch (SQLException cause) {
				throw new BairroException("PROBLEMAS AO INSERIR BAIRRO", cause);

			} finally {
				// fechar conexão
				DataSource.close(connection);
			}

		} catch (DataBaseException cause) {
			throw new BairroException(cause);

		}

	}






Galera se alguem ver aonde to errando por favor me falem.
ja tentei tudo o que voces disseram e parece e não consegui .
mas pra isso estou postando em detalhes  os processos talvez assim voces entendam minha duvida.

preciso muito entender isso.
como fazer a classe Municipio que é uma entidade ser inserida no campo id_municipio do mysql que é  do tipo INT.
M

Alguém ai sabe???

R

Mostre seu VO Bairro.

Criado 15 de janeiro de 2014
Ultima resposta 28 de jan. de 2014
Respostas 11
Participantes 5