Não insere no banco de dados[RESOLVIDO]

6 respostas
G

bom galera estou com o mysql 5.1 , eclipse e tomcat.....

a conexão me da sinal de que foi gravado ... mas não insere nada no banco de dados.......

DAO

package br.com.calculadora;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class MemoriaDAO {
	private Connection connection;
	
	public MemoriaDAO(){
		try{
			this.connection = new ConnectionFactory().getConnection();
			System.out.println("Cai no construtor vazio");
		}catch (Exception e){
			// TODO : handle exception
		}
	}
	public void adiciona(Memoria memoria){
		try{
		String sql = "insert into memoria (memoria1,memoria2,memoria3,memoria4,memoria5) values(?,?,?,?,?)";
	
			PreparedStatement stmt = connection.prepareStatement(sql);

			// seta os valores
			//stmt.setInt(memoria.getIdmemoria(), 1);
			stmt.setString(1,memoria.getMemoria1());
			stmt.setString(2,memoria.getMemoria2());
			stmt.setString(3,memoria.getMemoria3());
			stmt.setString(4, memoria.getMemoria4());
			stmt.setString(5,memoria.getMemoria5());
		
			//stmt.execute();
			stmt.close();
			
			
			//System.out.println("Gravado!");
			
		}catch (SQLException e){
			throw new RuntimeException(e);
		}
	}

}

classe memoria

package br.com.calculadora;

public class Memoria {

	private String memoria1;
	private String memoria2;
	private String memoria3;
	private String memoria4;
	private String memoria5;
	
	public String getMemoria1() {
		return memoria1;
	}
	public void setMemoria1(String memoria1) {
		this.memoria1 = memoria1;
	}
	public String getMemoria2() {
		return memoria2;
	}
	public void setMemoria2(String memoria2) {
		this.memoria2 = memoria2;
	}
	public String getMemoria3() {
		return memoria3;
	}
	public void setMemoria3(String memoria3) {
		this.memoria3 = memoria3;
	}
	public String getMemoria4() {
		return memoria4;
	}
	public void setMemoria4(String memoria4) {
		this.memoria4 = memoria4;
	}
	public String getMemoria5() {
		return memoria5;
	}
	public void setMemoria5(String memoria5) {
		this.memoria5 = memoria5;
	}
	
}

ConnectionFactory .....

package br.com.calculadora;

import java.sql.*;

public class ConnectionFactory {
	
	public Connection getConnection() throws ClassNotFoundException{
		System.out.println("Conectando ao banco");
		try{
		Class.forName("com.mysql.jdbc.Driver");
		return DriverManager.getConnection("jdbc:mysql://localhost:3306/calculadora", "root","1234");
		}catch (SQLException e){
			System.out.println("Erro na conexão");
			throw new RuntimeException(e);
		}
	}
}
testando a inserção
package br.com.calculadora;
	public class TestaInsere {
		public static void main(String[] args) {
		// pronto para gravar
		Memoria memoria = new Memoria();
		
		
		//memoria.setIdmemoria(2);
		memoria.setMemoria1("ppk476");
		memoria.setMemoria2("gj89d");
		memoria.setMemoria3("dfgsd58gdsf");
		memoria.setMemoria4("ff447875fff");
		memoria.setMemoria5("rrr8888fs");
		// grave nessa conexão!!!
		MemoriaDAO minhadao = new MemoriaDAO();
		
		// método elegante

		minhadao.adiciona(memoria);
		System.out.println("Gravado!");
		}
		
}

MENSAGEM QUE APARECE NO CONSOLE

Conectando ao banco
Cai no construtor vazio
Gravado!

6 Respostas

Y

Falta vc chamar o executeUpdate do PreparedStatement no seu Dao

G

teria como me mostrar como seria …

estou tentando colocar o executeupdate e não consigo…

vlew yoshikichi

Y

Na linha 31 você comentou:

//stmt.execute();

*msg foi editada [/cde] para [/code]

G

Exception in thread "main" java.lang.RuntimeException: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'memoria3' at row 1 at br.com.calculadora.MemoriaDAO.adiciona(MemoriaDAO.java:35) at br.com.calculadora.TestaInsere.main(TestaInsere.java:19) Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'memoria3' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3564) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364) at br.com.calculadora.MemoriaDAO.adiciona(MemoriaDAO.java:30) ... 1 more Conectando ao banco Cai no construtor vazio

agora deu este erro se não comentar o

stmt.execute();

vlew yoshikichi

Y

gmsilva:
Exception in thread "main" java.lang.RuntimeException: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'memoria3' at row 1 at br.com.calculadora.MemoriaDAO.adiciona(MemoriaDAO.java:35) at br.com.calculadora.TestaInsere.main(TestaInsere.java:19) Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'memoria3' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3564) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364) at br.com.calculadora.MemoriaDAO.adiciona(MemoriaDAO.java:30) ... 1 more Conectando ao banco Cai no construtor vazio

agora deu este erro se não comentar o

stmt.execute();

vlew yoshikichi

olha isso
http://www.guj.com.br/posts/list/140305.java

G

fiz uma pequena modificação aqui na dao

package br.com.calculadora;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class MemoriaDAO {
	private Connection connection;
	
	public MemoriaDAO(){
			try {
				this.connection = new ConnectionFactory().getConnection();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block       
				e.printStackTrace();                              //aqui a modificação         
			}
	}
	public void adiciona(Memoria memoria){
		try{
		String sql = "insert into memoria (memoria1,memoria2,memoria3,memoria4,memoria5) values(?,?,?,?,?)";
	
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1,memoria.getMemoria1());
			stmt.setString(2,memoria.getMemoria2());
			stmt.setString(3,memoria.getMemoria3());
			stmt.setString(4, memoria.getMemoria4());
			stmt.setString(5,memoria.getMemoria5());			
			stmt.execute();
			stmt.close();
			
		}catch (SQLException e){
			throw new RuntimeException(e);
		}
	}

}

e também aumentei a quantidade de caracteres no banco de dados (varchar (10) para varchar(20)...........

mto obrigado yoshikichi

resolvido

vlew

Criado 16 de novembro de 2010
Ultima resposta 17 de nov. de 2010
Respostas 6
Participantes 2