Colocar Objeto no Banco de Dados

Bom dia, estou com uma duvida. Estou querendo jogar um objeto no banco de dados. Mas estou perdido, a baixo esta o codigo no qual estou usando.

Antes estava passando os atributos, mas agora passo o objeto inteiro, mas como devo deixar no banco de dados, para ele ser armazenado??

Banco de dados: MySql + Navicat
IDE: MyEclipse

Grato!

[code]public Cliente incluirServico(Cliente cliente){

	Connection con = getConnection();
	PreparedStatement ps = null;
	
	try {
		ps = con.prepareStatement("insert into servico.cliente(nome, telefone, problema) values(?,?,?);");
		ps.setString(1,nome);
		ps.setString(2,telefone);
		ps.setString(3,problema);
		ps.execute();
		
	} catch (SQLException e) {
		e.printStackTrace();
	}finally{
		try {
			ps.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	return cliente;

}[/code]

Duas coisas que eu achei estranho

  1. public Cliente incluirServico(Cliente cliente);

Vc passa um objeto Cliente e o retorno eh o mesmo cliente ?? Esse metodo poderia ser void ou entao boolean true ou false pra indicar se o insert deu certo.

ps.setString(1,nome);
ps.setString(2,telefone);
ps.setString(3,problema);

nome, telefone e problema sao atributos do Objeto Cliente? Se sim, vc teria que prover getters e setters no seu Cliente, ai ficaria algo do tipo :

ps.setString(1,cliente.getNome());
ps.setString(2,cliente.getTelefone());
ps.setString(3,cliente.getProblema());

Do jeito que esta essas variaveis estao vindo de lugar nenhum. Vc tem que obte-las a partir desse objeto Cliente que vc ta passando no parametro.

//Daniel

Olá, orbigado pela ajuda.

Blz, era isso mesmo que eu estava precisando, mas ainda continuo com duvida, na linha:

ps = con.prepareStatement("insert into servico.cliente(nome, telefone, problema) values(?,?,?);");

Como estou recebendo um Objeto, eu mantenho no comando sql os atributos ou não?

=D

hummm, acho que nao precisa desse “servico.cliente” se a sua tabela chama “cliente” vc pode fazer :

ps = con.prepareStatement(“insert into cliente(nome, telefone, problema) values(?,?,?);”);

Tirando isso, deveria funcionar.

//Daniel

baixe a apostila de web da caelum e seja feliz:

se tiver dificuldades ainda baixe a do curso de java básico pra se aprofundar nos conceitos.

andreiribas, eu peguei varios pdf la na caelum, muito bom o material deles. Valeu!

[quote=windsofhell]hummm, acho que nao precisa desse “servico.cliente” se a sua tabela chama “cliente” vc pode fazer :

ps = con.prepareStatement(“insert into cliente(nome, telefone, problema) values(?,?,?);”);

Tirando isso, deveria funcionar.

//Daniel[/quote]

windsofhell, vê só, o erro que esta dando agora é outro, ele aponta para o metodo que uso para incluir no banco.

Estou trabalhando com EJB. Vê o que acontece:

[code]javax.ejb.EJBException: java.lang.NullPointerException; nested exception is: java.lang.NullPointerException
java.lang.NullPointerException
at Cliente.ClienteSession.incluirServico(ClienteSession.java:39)

at Cliente.ClienteSessionBean.main(ClienteSessionBean.java:40)
[/code]

A primeira linha em negrito, é a função ps.close(); no metodo incluiservico(cliente);

A segunda linha, e referente ao e.printStackTrace(); que fica dentro do catch que uso na main.

O erro só dar depois que click em ENTER, que seria o momento que pegar os atributos, cliente.set***, e joga no objeto, para entrar na função: inserirServico(cliente);

Será bronca com a conexao com a base de dados?