Problemas para inserir no BD

6 respostas
The_Rogue

Olá Galera,

Boa noite a todos,

Bom galera estou começando no nesse universo de programação java.

Bom to vendo e lendo alguns tutoriais e resolvi fazer um exemplo de um dos tutoriais que eu vi, que é um programa para inserir dados em um banco de dados, o codigo esta executando corretamente, porem ele nao insere no arquivo do banco. Segue o codigo, agradeço desde ja qualquer ajuda.

package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/* Classe responavél por fazer a conecção
 * com o arquivo de banco de dados que no caso foi
 * usado um arquivo do msaccess pois ficaria mais dificil
 * explicar como criar um banco de dados no mysql por agora.
 */

public class DAO {
	/*Faz a conecção com o arquivo do access*/
	Connection con;
	
	/*Prepara as query que realizam as operações no banco.
	 *evita que seja colocado algum comando que nao exista
	 *na query original.
	 */
	PreparedStatement pstmt;
	
	/*Pega o resultado de uma query que foi executada e faz
	 *o tratamento.
	 */
	ResultSet rs;
	
	/*Faz a conecção com o arquivo do banco de dados.*/
	public void getConexao()throws Exception{
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
		con = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:/projeto java/banco.mdb","","");
	}
	
}
public void create(pessoa obj) throws Exception {
		getConexao();
		String query = "INSERT INTO pessoa(nome,cpf,email)VALUES(?,?,?)";
		pstmt = con.prepareStatement(query);
		pstmt.setString(1, obj.getNome());
		pstmt.setString(2, obj.getCpf());
		pstmt.setString(3, obj.getEmail());
		//pstmt.execute();
		pstmt.executeUpdate();
	}
public static void main(String[] args){
		Principal p = new Principal();
		p.grava();
	}
	
	public void grava(){
		Scanner input = new Scanner(System.in);
		pessoa p = new pessoa();
		System.out.printf("Nome: ");
		p.setNome(input.nextLine());
		System.out.printf("E-mail: ");
		p.setEmail(input.nextLine());
		System.out.println("CPF: ");
		p.setCpf(input.nextLine());
		try{
			pessoaDAO pd = new pessoaDAO();
			pd.create(p);
			System.out.println("Inserido com sucesso!");
		}catch(Exception e){
			System.out.println("Erro, tente mais tarde.");
			System.out.println("Motivo: "+e.getMessage());
		}
	}

Vlws!! Gente.

6 Respostas

Anime

Oi,

Pode ser a falta do driver, o nome do banco ou tabela que não corresponde…

Aqui tem um bom exemplo…http://mballem.wordpress.com/2011/02/21/utilizando-swing-com-banco-de-dados/

dcorteztec

E não gera erro nenhum, se fosse falta de jar, printaria classNotFound. ver qual ta gerando no console.

nel

Oi!

Remove aquel newInstance do seu driver, porque você quer uma instancia dele?
Você simplesmente realiza o Class.forName() para o registro.

A URL está correta mesmo?
Você confirmou que os valores estão sendo enviados corretamente ao método create? Ou seja, se o objeto Pessoa está sendo preenchido corretamente.

Por fim, o executeUpdate() retorna um int indicando a quantidade de linhas que foram alteradas, veja se ele está te retornando um.
Abraços.

The_Rogue

Bom, no momento eu estou no trabalho e o projeto acima esta em meu notebook. Assim que chegar em casa vou verificar.

Mas lembro que eu nao to usando um banco de dado mysql, e sim um arquivo do access .mdb para armazenar os dados digitados. Não acontece erro algum é exibida a mensagem como “Inserido com Sucesso!!”, porém quando abro o arquivo do access e abro a tabela ela esta vazia sem o registro adcionado. Estou usando esse arquivo de banco de dados pq pretendo ajudar meus colegas e usando o mysql a pessoa teria que ter instalado e configurado o que daria maior trabalho para explicar como faz esse tipo de banco para eles.

Assim que chegar em casa eu vou fazer essa alterações ai que me indicaram e posto algum retorno.

Editando …

Bom fiz a alteração removi o newinstance, tambem apaguei o pstmt.executeUpdate(); e tirei o comentario do pstmt.execute();

Porem continua a mesma coisa o codigo roda, sem nenhuma mensagem de erro no console. Mas nao esta inserindo os dados dentro do arquivo do access. Fui na pasta e verifiquei o caminho e esta correto, mas pude notar que quando rodo o programa e ele diz inserido com sucesso na pasta que ta o arquivo aparece um arquivo temporario de como se o access estivesse aberto, e quando abro o arquivo ele esta vazio assim que eu fecho o arquivo temporario some, será por causa disso, como faço para quando ele exibir a mensagem de inserido atualizado ou o que seja, ele feche a conecção com o banco.

Ps: Tomara que percebam que eu editei o topico, nao quiz postar seguido.

The_Rogue

Bom galera, estou respostando aqui para informar que consegui usando o mysql. Já com o arquivo de access não, vou ver se consigo achar depois algo que me explique o pq nao consegui inserir os dados, mudei a conecção segundo Anime e usei um banco mysql para testar o codigo e funcionou todas as funcoes normalmente.

Desde já agradeço a todos que me ajudaram.

Ps: Se alguem souber de algo com manipulacao de arquivos de access me mada uma pm por favor.

Anime

Oi,

Você criou a conexão ODBC, da uma olhadinha aqui… http://www.symmetry.com.br/arquivos/pmp_conexao_odbc.pdf( A partir da página 8, ok!)

Aqui tem um exemplo para baixar… http://www.guj.com.br/java/231956-java-controle-de-estoque

Porém o Access não é muito usado… :wink:

Criado 18 de agosto de 2011
Ultima resposta 19 de ago. de 2011
Respostas 6
Participantes 4