Problema com Gravação de Dados no Mysql

8 respostas
danillonc

Tenho um código no qual tenho uma classe somente com getters e setter e outra onde ler dados do teclado, criei um objeto da classe dos getters e setters na classe onde é feita a leitura dos dados do teclado e após a leitura dos dados passo como parametro o dado lido pro objeto junto do método set..., ele roda o programa de boa mas quando do o select a matricula vem com 0 e o nome com null...não to conseguindo ver o erro :idea:

public class ConnectionFactory {

	
	
	public Connection getConnection() {
		 System.out.println("Conectando ao banco");
		 try {
		 return DriverManager.getConnection("jdbc:mysql://localhost/testexxx", "root", "");
		 } catch(SQLException e) {
		 throw new RuntimeException(e);
		 }
		 }
	
}
public class Aluno {

	private String nome;
	private long matricula;
	private double gq1=0,gq2=0,gq3=0;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public long getMatricula() {
		return matricula;
	}
	public void setMatricula(long matricula) {
		this.matricula = matricula;
	}
	public double getGq1() {
		return gq1;
	}
	public void setGq1(double gq1) {
		this.gq1 = gq1;
	}
	public double getGq2() {
		return gq2;
	}
	public void setGq2(double gq2) {
		this.gq2 = gq2;
	}
	public double getGq3() {
		return gq3;
	}
	public void setGq3(double gq3) {
		this.gq3 = gq3;
	}
}
public class AlunoLer {
	private String nome;
	private long matricula;
	private double gq1=0,gq2=0,gq3=0;
	
	
	Scanner ler = new Scanner(System.in);
	Aluno a = new Aluno() ;
	public void matricula(){
		System.out.println("Informe a matricula");
		matricula=ler.nextLong();
		a.setMatricula(matricula);
	}
	
	public void nome(){
		System.out.println("informe o nome");
		nome=ler.next();
		a.setNome(nome);
	}
	
	public void gq1(){
	  System.out.println("Informe a GQ1");
	  gq1=ler.nextDouble();
	  a.setGq1(gq1);
	}
	
	public void gq2(){
		  System.out.println("Informe a GQ2");
		  gq2=ler.nextDouble();
		  a.setGq1(gq2);
		}
	
	public void gq3(){
		  System.out.println("Informe a GQ3");
		  gq3=ler.nextDouble();
		  a.setGq1(gq3);
		}
}
private Connection	con = new ConnectionFactory().getConnection();
	
	Aluno a = new Aluno();
	
	public void insere(){
		
		try{
			String sql = "insert into aluno(matricula,nome,gq1,gq2,gq3,situacao) values('"+a.getMatricula()+"','"+a.getNome()+"','"+0+"','"+0+"','"+0+"','"+null+"')";
			PreparedStatement sti = con.prepareStatement(sql);
			//sti.setLong(1,a.getMatricula());
			//sti.setString(2,a.getNome());
			//sti.setDouble(3,(Double) null);
			//sti.setDouble(4,(Double) null);
			//sti.setDouble(5,(Double) null);
			//sti.setString(6,null);
			sti.execute();
		}catch(SQLException e){
			throw new RuntimeException (e);
		}
	}
	
	public void deleta(){
		try{
			String sql = "delete from aluno where matricula = ";
			PreparedStatement std = con.prepareStatement(sql);
		}catch(SQLException e){
			throw new RuntimeException (e);
		}
	}
	
}
public class TestaDAO {

	public static void main(String args[]){
    
		int op;
		Scanner ler = new Scanner(System.in);
		AlunoDAO  dao = new AlunoDAO();
		AlunoLer a = new AlunoLer();
		do{System.out.println("----------Menu----------"); 
		System.out.println("[ 1 ] Inserir novo Aluno");
		System.out.println("[ 2 ] Excluir Aluno");
		System.out.println("[ 3 ] Lançar Notas");
		System.out.println("[ 4 ] Pesquisar Dados");
		System.out.println("[ 5 ] Exibir Estatísticas");
		System.out.println("[ 6 ] Sair");
		System.out.print("Digite a opção:");
		op = ler.nextInt();
		ler.nextLine();
		
		switch(op){
		case 1:
		 a.matricula();
		 a.nome();
		 dao.insere();
		}
		}while(op!=1);
		
		
	}
	
}

8 Respostas

A

Tô imaginando que você começou a coisa certa mas do jeito errado. Comentou estas linhas porque estavam dando erro ?

//sti.setLong(1,a.getMatricula());  
         //sti.setString(2,a.getNome());  
         //sti.setDouble(3,(Double) null);  
         //sti.setDouble(4,(Double) null);  
         //sti.setDouble(5,(Double) null);  
         //sti.setString(6,null);

Se foi isso é porque sua instrução sql está errada para uso com PreparedStatement. O correto seria isso:

String sql = "insert into aluno(matricula,nome,gq1,gq2,gq3,situacao) values(?,?,?,?,?,?)";

Altere essa linha e descomente as outras e deve funcionar.

mauriciot.silva

Cara seguinte

nao se usa JDBC desta forma...
da uma lida sobre Statement, PreparedStatement, ResultSet...

e no seu metodo insert vc da um new em Aluno eh outro aluno que
vc esta informando...
tenta isso no seu metodo insert

public void insert(Aluno a){
// Aluno a = new Aluno();

// logica para realizar o insert
}
danillonc
ADEMILTON:
Tô imaginando que você começou a coisa certa mas do jeito errado. Comentou estas linhas porque estavam dando erro ?
//sti.setLong(1,a.getMatricula());  
         //sti.setString(2,a.getNome());  
         //sti.setDouble(3,(Double) null);  
         //sti.setDouble(4,(Double) null);  
         //sti.setDouble(5,(Double) null);  
         //sti.setString(6,null);
Se foi isso é porque sua instrução sql está errada para uso com PreparedStatement. O correto seria isso:
String sql = "insert into aluno(matricula,nome,gq1,gq2,gq3,situacao) values(?,?,?,?,?,?)";

Altere essa linha e descomente as outras e deve funcionar.

Eu comentei essas linhas pois da o erro de dados truncado do Java, nesse momento eu só desejo inserir nome e matricula, e apliquei null nos outros campos como gq1,gq2,g3 e situação, dai ele nãoa ceita o null coloquei zero mesmo, depois dou um update...

mauriciot.silva:
Cara seguinte

nao se usa JDBC desta forma...
da uma lida sobre Statement, PreparedStatement, ResultSet...

e no seu metodo insert vc da um new em Aluno eh outro aluno que
vc esta informando...
tenta isso no seu metodo insert

public void insert(Aluno a){
// Aluno a = new Aluno();

// logica para realizar o insert
}

CAra é ai que tá , pois quando eu precisar acessao esse método na classe testaDAO lá nos cases's do switch ele vai pedir paramteros .... :?

mauriciot.silva

switch(op){ case 1: a.matricula(); a.nome(); dao.insere(a); } }while(op!=1);

qual eh o problema disso???

danillonc

mauriciot.silva:
switch(op){ case 1: a.matricula(); a.nome(); dao.insere(a); } }while(op!=1);

qual eh o problema disso???

Beleza irei testar , e no caso do insert poderia deixar concatenando os métodos ou as ??? , e executando cada instrução passo a passo…? sei que da forma que fiz fica meio embolado o código, mal costume.

mauriciot.silva

Cara nunca se deve concatenar parametros na sua query
as "?" sao setadas desta forma...

PreparedStatement ps = conn
				.prepareStatement("INSERT INTO aluno (matricula,nome,gq1,gq2,gq3,situacao) VALUES values(?,?,?,?,?,?) ");
	
		ps.setObject(1, "");

claro o metodo "set" do PreparedStatement
vai varias de acordo com o tipo do seu Objecto

danillonc

public void LancarNotas(Aluno a){ try{ String sql = "update aluno set gq1=?,gq2=?,gq3=?,situacao=? where matricula = ?"; PreparedStatement stup = con.prepareStatement(sql); stup.setDouble(1,a.getGq1()); stup.setDouble(2,a.getGq2()); stup.setDouble(3,a.getGq3()); if((a.getGq1()+a.getGq2())/2>6){ stup.setString(4,"Aprovado"); } else{ stup.setString(4,"Reprovado"); //stup.setDouble(3,a.getGq3()); } stup.setLong(5,a.getMatricula()); stup.execute(); }catch(SQLException e){ throw new RuntimeException(e); } }

switch(op){ case 1: a.matricula(); a.nome(); dao.insere(a.getAluno()); break; case 2: a.matricula(); dao.deleta(a.getAluno()); break; case 3: a.matricula(); a.gq1(); a.gq2(); //a.gq3(); dao.LancarNotas(a.getAluno()); break; } }while(op!=4);

um problema no código do ALunoDAO, eu leio gq1,gq2, ele pega o valor de gq2 e joga pra gq1 no banco, será que é pela falta do gq3? creio que não…

@edit : o problema de inserir no banco consegui resolver, agora apareceu este, resvisei o código muitas vezes e não to conseguindo achar esse erro…

A

Na sua classe AlunoLer, olha o que você tá fazendo nesses dois métodos:

public void gq2(){  
           System.out.println("Informe a GQ2");  
           gq2=ler.nextDouble();                         
           a.setGq1(gq2);                                     aqui o correto não seria a.setGq2(gq2) ?
         }  
       
     public void gq3(){  
           System.out.println("Informe a GQ3");  
           gq3=ler.nextDouble();  
           a.setGq1(gq3);                                     aqui o correto não seria a.setGq3(gq3) ?
         }
Criado 25 de junho de 2012
Ultima resposta 27 de jun. de 2012
Respostas 8
Participantes 3