Persistindo dados utilizando o pacote java.sql[RESOLVIDO]

3 respostas
S

Olá a todos

Gostaria de saber como faço para criar meu dado para persistir os dados de duas tabelas que se relacionam. Eu tenho uma tabela editora e outra tabela livro com relacionamento um para muitos. Como faço para persistir os dados utilizando JDBC na tabela livro, sendo que preciso salvar uma referência editora também? Segue abaixo o código

Tabela editora

CREATE TABLE editora (
	id bigint not null auto_increment, 
	nome varchar(255) not null,
	email varchar(255) not null,
	primary key (id)

)
engine = InnoDB;

Tabela livro

CREATE TABLE livro (
	id bigint not null auto_increment,
	titulo varchar(255) not null,
	preco double not null,
	editora_id bigint not null, 
	primary key (id),
	constraint fk_editora foreign key fk_editora(editora_id)
	references editora(id)
	on delete restrict
	on update restrict
)
engine = InnoDB;

3 Respostas

R

Já experimentou conhecer o hibernate? Facilitaria muito o seu trabalho aqui. Com jdbc puro é um pouco mais trabalhoso. Se quiser a resposta com hibernate, eu te ajudo. Valeu.

S

Cara eu conheço hibernate e JPA, obrigado. Eu queria mesmo era voltar aos primórdios. Se tu tiveres uma dica ai pode mandar, mas valeu por ter respondido

S
Silveira.Marcelo:
Olá a todos

Gostaria de saber como faço para criar meu dado para persistir os dados de duas tabelas que se relacionam. Eu tenho uma tabela editora e outra tabela livro com relacionamento um para muitos. Como faço para persistir os dados utilizando JDBC na tabela livro, sendo que preciso salvar uma referência editora também? Segue abaixo o código

Tabela editora

CREATE TABLE editora (
	id bigint not null auto_increment, 
	nome varchar(255) not null,
	email varchar(255) not null,
	primary key (id)

)
engine = InnoDB;

Tabela livro

CREATE TABLE livro (
	id bigint not null auto_increment,
	titulo varchar(255) not null,
	preco double not null,
	editora_id bigint not null, 
	primary key (id),
	constraint fk_editora foreign key fk_editora(editora_id)
	references editora(id)
	on delete restrict
	on update restrict
)
engine = InnoDB;

Bem pessoa, consegui persistir os dados utilizando um relacionamento 1 : N entre as tabelas mencionadas acima. Abaixo segue o código:

Editora.java
package br.com.soaressolutions.model;

public class Editora {

	private Long id;
	private String nome;
	private String email;
	
	
	public Editora() {
		super();
	}
	
	public Editora(String nome, String email) {
		this.nome = nome;
		this.email = email;
	}
	
	public Editora(Long id, String nome, String email) {
		this(nome, email);
		this.id = id;
		
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	public String toString() {
		return "[Editora: " + this.nome + "] "
				+ " [e-mail: " + this.email + "] "
				+ "[id: " + this.id + "]";
	}
}
Livro.java
[
package br.com.soaressolutions.model;

public class Livro {

	private Long id;
	private String titulo;
	private Double preco;
	private Editora editora;
	
	public Livro() {
		super();
	}
	
	public Livro(Long id, String titulo,Double preco, Editora editora) {
		this.id = id;
		this.titulo = titulo;
		this.preco = preco;
		this.editora = editora;
	}
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public Double getPreco() {
		return preco;
	}
	public void setPreco(Double preco) {
		this.preco = preco;
	}
	public Editora getEditora() {
		return editora;
	}
	public void setEditora(Editora editora) {
		this.editora = editora;
	}
	
	public String toString() {
		return "[Titulo: " + this.getTitulo() + 
				" [preco: " + this.getPreco() + "]";
	}
}
LivroDaoImpl.java
package br.com.soaressolutions.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import br.com.soaressolutions.connect.ConnectionDataBase;
import br.com.soaressolutions.model.Livro;

public class LivroDaoImpl implements LivroDao {

	@Override
	public void save(Livro livro) throws SQLException {
		String sql = "INSERT INTO livro (titulo, preco, editora_id)";
		sql += " VALUES ('" + livro.getTitulo() + "',";
		sql += "'" + livro.getPreco() + "'" + ",";
		sql += "'" + livro.getEditora().getId() + "')";
		
		Connection conn = null;
		Statement stmt = null;
		
		try {
			conn = ConnectionDataBase.getConnection();
			stmt = conn.createStatement();
			stmt.executeUpdate(sql);
			System.out.println("Livro salvo com sucesso");
		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			ConnectionDataBase.close(conn, stmt);
		}

	}

}

Agora segue a classe de teste TesteInsercaoLivro.java

package br.com.soaressolutions.test;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Scanner;

import br.com.soaressolutions.connect.ConnectionDataBase;
import br.com.soaressolutions.dao.EditoraDaoImpl;
import br.com.soaressolutions.dao.LivroDaoImpl;
import br.com.soaressolutions.model.Editora;
import br.com.soaressolutions.model.Livro;

public class TesteInserirLivro {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Livro livro = new Livro();
		List<Editora> editoras = null;
	
		Scanner sc = new Scanner(System.in);
		Connection conn = null;
		@SuppressWarnings("unused")
		Statement stmt = null;
		
		
		
		System.out.println("Livro: ");
		String nomeLivro = sc.nextLine();
		System.out.println("Preco: ");
		Double preco = sc.nextDouble();
		System.out.println("Editora: ");
		
		livro.setTitulo(nomeLivro);
		livro.setPreco(preco);
		
		try {
			conn = ConnectionDataBase.getConnection();
			stmt = conn.createStatement();
			editoras = new EditoraDaoImpl().getAll();
			
			//exibe a lista de editoras para escolha
			for(Editora ed: editoras) {
				System.out.print(ed.getId() + "\t");
				System.out.println(ed.getNome());
									
			}
			//opção de escolha de editoras
			Long opcao = sc.nextLong();
			//percorre os objetos persistidos na entidade Editora
			for(int i = 0; i < editoras.size(); i++) {
				//Se opcao escolhida for igual a
				//alguma editora da lista
				if(opcao.equals(editoras.get(i).getId())) {
					//define um editora no objeto livro
					livro.setEditora(editoras.get(i));
					//persiste os objetos na tabela livro
					new LivroDaoImpl().save(livro);								
				}  					
			}			
			
		} catch(SQLException e) {
			e.printStackTrace();
		}	
		
	}

}

Fica aqui o desafio para uma melhor implementação do código, para quem tiver uma outra solução para apresentar.

Obrigado a todos que visitaram o tópico e responderam

Feliz Natal

Criado 22 de dezembro de 2012
Ultima resposta 22 de dez. de 2012
Respostas 3
Participantes 2