Não consigo fazer um insert no banco de dados

7 respostas
J

Ola pessoal estou fazendo um exemplo de conexão com banco de dados

mais o que me parece no meu metod inserir os dados não são incluidos na base

vou passar o codigo pra ficar mais facil

public class Aula {

	private Connection conn;
	private PreparedStatement pstmt;
	private Statement stmt;
	private ResultSet rs;
	
	Cliente cliente = new Cliente();
	

	public void open() {

		try {
			// Carrenga um drive em tempo de execução
			Class.forName("org.hsqldb.jdbcDriver");
			System.out.println("Drive carregado");

			// Tentando estabelecer uma conexão com banco de dados
			conn = DriverManager.getConnection("jdbc:hsqldb:file:C:/banco/hsql/aula", "sa", "");
			System.out.println("Conexão com banco de dados estabelecida");

		} catch (ClassNotFoundException e) {
			System.out.println("Erro ao carregar o drive");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("Erro ao tentar estabelecer uma conexão");
			e.printStackTrace();
		}

	}
	
	public void close() {
		
		try {
			if (stmt != null)
				stmt.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}
	
	public void inserir() {
		
		try {
			
			cliente.setId(10);
			cliente.setNome("Test");
			
			//Abrindo a conexão com o banco
			open();
			
			//Instanciando o objeto statement (stmt)
			stmt = conn.createStatement();
			
			//Executando uma instrução sql.
			stmt.executeUpdate("INSERT INTO ALUNO VALUES (" + cliente.getId() + ", '" + cliente.getNome() + "')");
			
			// Fechando a conexão com o banco de dados
			close();			
			
		} catch (SQLException e) {
			// Fechando a conexão com o banco
			close();
			e.printStackTrace();
		}		
	}
	
	public ResultSet buscarAlunos() {
		
		try {
			
			open();
			stmt = conn.createStatement();
			rs = stmt.executeQuery("SELECT id, nome FROM ALUNO");
						
			while (rs.next()) {

				cliente.setId(rs.getInt("id"));
				cliente.setNome(rs.getString("nome"));
				
				System.out.println("ID: " + cliente.getId());
				System.out.println("Nome: " + cliente.getNome());
			}
						
			close();
			
			return rs;
			
		} catch (SQLException e) {
			close();
			e.printStackTrace();
		}
		return null;
	}
	
	
	
	public static void main(String[] args) {
		
		Aula aula =  new Aula();
		aula.inserir();
		aula.buscarAlunos();	
	}
}

7 Respostas

BrunoBastosPJ

Ele da alguma exception?

Tenta mudar sua query para

Já tive problemas com o banco de dados PostgreSQL por causa disso

Abs

J

fiz isso não funcionou

pelo que vejo deve ser alguma coisa com o commit
mais ja tentei conn.commit autoCommit e nada não funciona

P

por acaso você se atentou para a parte do código dentro do método Inserir()?

#             cliente.setId(10);  
#             cliente.setNome("Test");

se sua tabela Aluno tiver chave primária ( por exeplo ID ), e vc estiver querendo colocar um valor que já existir no banco vai dar pau e não commita.
Entendeu pq? você está toda hora colocando o mesmo registro, e a chave primária tem que ser única.

Até mais

E

Posta o trace do erro que fica mais fácil ajudar.

S
Segue um exemplo prático... :arrow: Fábrica de conexões:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {

	public static Connection getConnection() throws SQLException{
		try {
 			Class.forName("com.mysql.jdbc.Driver");
 			return DriverManager.getConnection("jdbc:mysql://localhost/bdteste","root","root");
 		} catch (ClassNotFoundException e) {
 			throw new SQLException(e.getMessage());
 		}
	}
}
:arrow: Cliente:
public class Cliente {

	private long id; 
	private String nome; 
	private String cpf;
	
	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 getCpf() {
		return cpf;
	}
	
	public void setCpf(String cpf) {
		this.cpf = cpf;
	} 
	
	public String toString(){
		return this.nome;
	}
	
	public boolean equals(Object obj){
		if( (obj instanceof Cliente) && ( (Cliente)obj).getCpf().equals(this.cpf) ){
			return true;
		} else {
			return false;
		}
	}
	
	public int hashCode(){
		return this.cpf.length();
	}
	
}
:arrow: ClienteDAO:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.engenharia.entities.Cliente;

public class ClienteDAO {

	private Connection con; 

	public ClienteDAO() throws SQLException {
		this.con = ConnectionFactory.getConnection();
	}

	public void insert(Cliente cliente) throws SQLException{
		PreparedStatement stmt = 
			this.con.prepareStatement("insert into clientes(id, nome, cpf) values(?,?,?)");

		stmt.setLong(1, cliente.getId());
		stmt.setString(2, cliente.getNome());
		stmt.setString(3, cliente.getCpf());

		stmt.execute();
		stmt.close();
	}

	public void remove(Cliente cliente) throws SQLException {
		PreparedStatement stmt = con.prepareStatement("delete from clientes where id=?");
		stmt.setLong(1, cliente.getId());
		stmt.execute();
		stmt.close();
	} 

	public void altera(Cliente Cliente) throws SQLException {
		PreparedStatement stmt = con.prepareStatement("update clientes set " +
		"id=?, nome=?, cpf=? where id=?");
		stmt.setLong(1, Cliente.getId());
		stmt.setString(2, Cliente.getNome());
		stmt.setString(3, Cliente.getCpf());

		stmt.execute();
		stmt.close();
	} 
	
	public List<Cliente> getLista() throws SQLException {
		PreparedStatement stmt = 
			this.con.prepareStatement("select * from clientes");
		ResultSet rs = stmt.executeQuery();
		List<Cliente> clientes = new ArrayList<Cliente>();
		while (rs.next()) {
			// criando o objeto Cliente 
			Cliente cliente = new Cliente();
			cliente.setId(rs.getLong("id"));
			cliente.setNome(rs.getString("nome"));
			cliente.setCpf(rs.getString("cpf"));
			// adicionando o objeto à lista
			clientes.add(cliente);
		}

		rs.close();
		stmt.close();
		return clientes;
	}

}
Como pode perceber, o exemplo usa o MySQL, troque pelo seu banco. Caso não entenda, posta ae!

Abraço!

L

Deixa eu aproveitar o tópico e esse exemplo prático…
sempre esses exemplos são em torno de alguma tabela “pai”. Nunca é uma tabela que possui relacionamentos.

Acho bacana exemplificar como seria uma tabela “Cidade” por exemplo, sendo que ela tem chave com a tabela UF e que a tabela Bairro tem chave com ela…
Pode dar uma ajuda?

Um abraço!

V

dá erro? vc tá passando algum valor null? o id da tabela é identity,auto increment ou algo parecido? se for nao pode passar o id.

Criado 29 de fevereiro de 2008
Ultima resposta 24 de mar. de 2008
Respostas 7
Participantes 7