Exercicio JDBCInsere DUVIDAS

8 respostas
thitkd

Estou com duvidas lógicas referente a esse código:

package br.com.caelum.jdbc;

import java.sql.SQLException;
import java.util.Calendar;

import br.com.caelum.jdbc.dao.ContatoDAO;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class JDBCInsere extends ContatoDAO{
	
	public static void main(String[] args) throws SQLException {
		// conectando
		Connection con = new ConnectionFactory().getConnection();
		
		
		// cria um Statement
		String sql = "insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";
		Statement stmt = (Statement) con.createStatement();
		
		// preenche os valores
		stmt.setString(1, "Caelum");
		stmt.setString(2, "[email removido]");
		stmt.setString(3, "R. Vergueiro 3185 cj57");
		stmt.setDate(4, new java.sql.Date(Calendar.getInstance().getTimeInMillis()));
		
		// executa
		stmt.execute("Insert Into: ");
		stmt.close();
		System.out.println("Gravado!");
		con.close();
		}
}

Acusam erros em
Connection con = new ConnectionFactory().getConnection();
e em
setString e setDate,

estou fazendo algo errado?
Por favor, ajudem-me.[/b]

Obrigado…

8 Respostas

A

posta o codigo da sua classe ConnectionFactory, para poder te ajudar

thitkd
package br.com.caelum.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.management.RuntimeErrorException;


public class ConnectionFactory {
	
	public Connection getConnection(){
		try {
			return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "");
		}
		catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

}
A

segue a sua classe modificada

package br.com.caelum.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.management.RuntimeErrorException;


public class ConnectionFactory {
	
	public Connection getConnection(){
		try {
                        Class.forName("com.mysql.jdbc.Driver");
			return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "");
		}
		catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

}

t+

ViniGodoy

Sim, está fazendo errado:

a) Não se importa nada do pacote com.mysql.jdbc, ou qualquer pacote dentro dele;
b) Deve se colocar métodos como close() em finallys, ou usar o recurso de try with resources (Java 7);
c) Você deveria criar um PreparedStatement, e não um Statement.
d) Você também deve fechar o statement.

Correções:

package br.com.caelum.jdbc;

import java.sql.SQLException;
import java.util.Calendar;

import br.com.caelum.jdbc.dao.ContatoDAO;

//Pacotes certos
import java.sql.Connection;
import java.sql.Statement;

public class JDBCInsere extends ContatoDAO{
   public static void main(String[] args) throws SQLException {
      String sql = "INSERT INTO contatos (nome,email,endereco,dataNascimento) VALUES (?,?,?,?)";

      //Try with resources (Java 7)
      try (Connection con = new ConnectionFactory().getConnection(),
            Statement stmt = con.prepareStatement(sql))
      {		
         // preenche os valores
         stmt.setString(1, "Caelum");
         stmt.setString(2, "[email removido]");
         stmt.setString(3, "R. Vergueiro 3185 cj57");
         stmt.setDate(4, new java.sql.Date(Calendar.getInstance().getTimeInMillis()));
		
         // executa
         stmt.executeUpdate();
         System.out.println("Gravado!");
      }
      catch (SqlException e) {
         System.out.println("Problemas ao gravar");
         e.printStackTrace();
      }
}
thitkd

nesse código:

Class.forName("com.mysql.jdbc.Driver");

Ele informa “ClassNotFoundException tipo de exceção não tratada”

Na linha do “try” ele informa:
Multiple markers at this line
- Syntax error on token “Connection”, ( expected after
this token
- Syntax error on token “try”, throw expected

na linha do statement ele informa:
Multiple markers at this line
- Syntax error, insert “)” to complete
Expression
- Syntax error, insert “;” to complete
ThrowStatement
- Statement cannot be resolved to a variable
- Syntax error on token “stmt”, delete this
token

na linha:

catch (SqlException e) { System.out.println("Problemas ao gravar"); e.printStackTrace(); }
ele informa:
Multiple markers at this line
- Syntax error on token “catch”, for expected
- Syntax error, insert “; ; ) Statement” to complete
ForStatement
- SqlException cannot be resolved to a type

ViniGodoy

Então os problemas são que:
a) Você não está usando o Java 7 (note que eu afirmei explicitamente que esse try era do Java 7);
b) Você não associou o driver do JDBC do mysql ao seu projeto. Você deve baixa-lo no site do MySql e adiciona-lo como dependência.

O código em Java 6 seria assim:
package br.com.caelum.jdbc;

import java.sql.SQLException;
import java.util.Calendar;

import br.com.caelum.jdbc.dao.ContatoDAO;

//Pacotes certos
import java.sql.Connection;
import java.sql.Statement;

public class JDBCInsere extends ContatoDAO{
   public static void main(String[] args) throws SQLException {
      String sql = "INSERT INTO contatos (nome,email,endereco,dataNascimento) VALUES (?,?,?,?)";

      //Try catch e finally (Java 6 e anterior)
      Connection con = null;
      Statement stmt = null;
      try 
      {	
        con = new ConnectionFactory().getConnection();  
        stmt = con.prepareStatement(sql);
         // preenche os valores
         stmt.setString(1, "Caelum");
         stmt.setString(2, "[email removido]");
         stmt.setString(3, "R. Vergueiro 3185 cj57");
         stmt.setDate(4, new java.sql.Date(Calendar.getInstance().getTimeInMillis()));
		
         // executa
         stmt.executeUpdate();
         System.out.println("Gravado!");
      }
      catch (SqlException e) {
         System.out.println("Problemas ao gravar");
         e.printStackTrace();
      }
      finally {
          if (stmt != null) try { stmt.close(); } catch (Exception e) {}
          if (con != null) try { con.close(); } catch (Exception e) {}
     }
}

Certifique-se também de ter um banco de dados com a tabela contatos criada.

thitkd

Valeu a Ajuda!!! OBRIGADO!!!

ViniGodoy

Funcionou?

Criado 25 de setembro de 2011
Ultima resposta 27 de set. de 2011
Respostas 8
Participantes 3