Exemplo de conexão de banco de dados Deitel

21 respostas
mirrah

Estou estudando java pelo Deitel e copiando um de seus exemplos de conexão com o banco de dados o meu net beans acusou dois erros na classe.

package src;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class DispalysAuthors {

    //nome do Driver JDBC e URL do banco de dados
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DDATABASE_URL = "jdbc:mysql://localhost/books";

    //carrega o aplicativo
    public static void main(String[] args){

        //gerencia a conecção
        Connection connection = null;
        //instrução de consulta
        Statement statement = null;

        //conecta-se com o banco de dados e o consulta
        try{

            //carrega a classe de drive do banco de dados
            Class.forName( JDBC DRIVER );

            //estabelece conexão com o banco de dados
            connection =  DriverManager.getConnection( DATABASE URL,"root","25quadra" );

            //cria statement para consultar bancoo de dados
            statement = connection.createStatement();

            //consulta o banco de dados
            ResultSet resultSet = statement.executeQuery( "SELECT authorId, firstname, lastName FROM authors;" );

            //processa o resultados da consulta
            ResultSetMetaData metaData = resultSet.getMetaData();
            int numberOfColumns = metaData.getColumnCount();
            System.out.println( "Authors table of books database" );

            for(int i = 1;i<=numberOfColumns;i++)
               System.out.printf( "%-8\t",metaData.getColumnName( i ) );
            System.out.println();

            while( resultSet.next() ){

                for( int i = 1;i <= numberOfColumns;i++ )
                    System.out.printf( "%-8s\t",resultSet.getObject( i ) );
                System.out.println();

            }//fim do while

        }//fim do try
        catch( SQLException sqlexception ){

            sqlexception.printStackTrace();
            System.exit( 1 );

        }//fim do catch
        //assegura que a instrução e conecção sejam fechadas adequadamente
        finally{

            try{

                statement.close();
                connection.close();

            }//fim do try
            catch( Exception exception ){

                exception.printStackTrace();
                System.exit( 1 );

            }//fim do catch

        }//fim do finally

    }//fim do método main

}//fim da classe displayAuthors

Os erros acusados estão nas linhas 28 e 31, será que alguém pode me ajudar, muito obrigado

21 Respostas

A

Cara, tu colocou as variáveis sem o _ (underline)
e tuu delcarou com o underline

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DDATABASE_URL = "jdbc:mysql://localhost/books";  
  
    //carrega o aplicativo  
    public static void main(String[] args){  
  
        //gerencia a conecção  
        Connection connection = null;  
        //instrução de consulta  
        Statement statement = null;  
  
        //conecta-se com o banco de dados e o consulta  
        try{  
  
            //carrega a classe de drive do banco de dados  
            Class.forName( JDBC_DRIVER );  //esqueceu _ aqui
  
            //estabelece conexão com o banco de dados  
            connection =  DriverManager.getConnection( DATABASE_URL,"root","25quadra" );  //e aqui também
robert.gamma
andre.froes:
Cara, tu colocou as variáveis sem o _ (underline) e tuu delcarou com o underline
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DDATABASE_URL = "jdbc:mysql://localhost/books";  
  
    //carrega o aplicativo  
    public static void main(String[] args){  
  
        //gerencia a conecção  
        Connection connection = null;  
        //instrução de consulta  
        Statement statement = null;  
  
        //conecta-se com o banco de dados e o consulta  
        try{  
  
            //carrega a classe de drive do banco de dados  
            Class.forName( JDBC_DRIVER );  //esqueceu _ aqui
  
            //estabelece conexão com o banco de dados  
            connection =  DriverManager.getConnection( DATABASE_URL,"root","25quadra" );  //e aqui também

E também a declaração da URL está

static final String DDATABASE_URL = "jdbc:mysql://localhost/books";

Altere para
[code]
static final String DATABASE_URL = "jdbc:mysql://localhost/books";
[code]

veê se funciona.

Flw

mirrah

Bom gente, ainda está dando erro no:

Class.forName( JDBC_DRIVER );

Sendo que eu já fiz tudo o que propuseram aqui.

AndreSorge

Qual o erro que está aparecendo para você?
Qual IDE você está usando?

mirrah

Estou usando o net beans e para facilitar eu tirei um print do erro:

KaosBr

Boa noite,

De acordo com a imagem postada, o erro é causado pelo, espaço entre: JDBC_ e DRIVER. O correto é: JDBC_DRIVER.

Aproveitando o exercicio, já postado, qual a finalidade de usar a sintaxe:

static final String JDBC_DRIVER = “com.mysql.jdbc.Driver”;

Ficou claro ser uma declaração, porém não entendi a finalidade do: static final

[]s

aajjbb

eu nao sou nenhum expert, tenho o deitel e tudo, mas nao seria mais facil, criar uma factory de conecções?

aajjbb

tipo isso

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

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

gente, eu falei com um professor meu do curso que estou fazendo e ele disse que o Class.forName era desnecessário. Tirei ele e deu o seguinte erro:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/books
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at src.DispalysAuthors.main(DispalysAuthors.java:28)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

espero que alguém possa me ajudar, valeu gente.

AndreSorge

Pelo que eu entendi ele não está achando do Driver do MySql…você colocou dentro do projeto?

mirrah

o mais bizarro é que eu coloquei. eu ainda fui no local para add bibliotecas no net beans e já tinha o driver eu excluia e add de novo. Mandava o projeto rodar e o mesmo erro.

AndreSorge

Ou manu, não sei se tem alguma coisa ha ver…
mas no seu código na URL de conexão…

jdbc:mysql://localhost:3306/books

Essa porta que você está colocando…tira ela…deixa assim:>

jdbc:mysql://localhost/books

Tenta, qualquer coisa você posta e agente tenta te ajudar…abraços e boa sorte

mirrah

cara, eu fiz o que estava proposto acima e continuou o mesmo erro, será que é a versão do meu JDBC? por que de acordo o meu professor o meu JDBC é meio antigo, vamos diser assim.

KaosBr

Boa noite,

Posta o erro ara podemos dar uma olhada. E se possivel o novo código que está compilando, após eventuais ajustes.

[]s

pliniobota
public class ConexaoDao {
    private Connection conexao; 
    
    /** Creates a new instance of ConexaoDao */
    public com.mysql.jdbc.Connection ConexaoComOBancoDeDados() throws ClassNotFoundException, SQLException{
        Class.forName("com.mysql.jdbc.Driver");
        String stringConexao = "jdbc:mysql://localhost:3306/projeto";
        conexao = DriverManager.getConnection(stringConexao, "root", "");
        
        return (com.mysql.jdbc.Connection) conexao;
    }
    
    public static void main(String[] args)    {
        new ConexaoDao();
    }
    
}
mirrah

está dando o mesmo erro de antes:

mirrah

está dando o mesmo erro de antes

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/books  
        at java.sql.DriverManager.getConnection(DriverManager.java:602)  
        at java.sql.DriverManager.getConnection(DriverManager.java:185)  
        at src.DispalysAuthors.main(DispalysAuthors.java:28)  
Java Result: 1  
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
M

Você está usando o Class.forName("")? Ele é necessário nesse caso.

E você tem certeza mesmo que o driver do MySQL está no classpath do seu projeto?

mirrah

exemplo do deitel atualizado

package src;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class DispalysAuthors {

    //nome do Driver JDBC e URL do banco de dados
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DATABASE_URL = "jdbc:mysql://localhost/books";

    //carrega o aplicativo
    public static void main(String[] args){

        //gerencia a conecção
        Connection connection = null;
        //instrução de consulta
        Statement statement = null;

        //conecta-se com o banco de dados e o consulta
        try{
            
            //estabelece conexão com o banco de dados
            connection =  DriverManager.getConnection( DATABASE_URL,"root","25quadra" );

            //cria statement para consultar bancoo de dados
            statement = connection.createStatement();

            //consulta o banco de dados
            ResultSet resultSet = statement.executeQuery( "SELECT authorId, firstname, lastName FROM authors;" );

            //processa o resultados da consulta
            ResultSetMetaData metaData = resultSet.getMetaData();
            int numberOfColumns = metaData.getColumnCount();
            System.out.println( "Authors table of books database" );

            for(int i = 1;i<=numberOfColumns;i++)
               System.out.printf( "%-8\t",metaData.getColumnName( i ) );
            System.out.println();

            while( resultSet.next() ){

                for( int i = 1;i <= numberOfColumns;i++ )
                    System.out.printf( "%-8s\t",resultSet.getObject( i ) );
                System.out.println();

            }//fim do while

        }//fim do try
        catch( SQLException sqlexception ){

            sqlexception.printStackTrace();
            System.exit( 1 );

        }//fim do catch
        //assegura que a instrução e conecção sejam fechadas adequadamente
        finally{

            try{

                statement.close();
                connection.close();

            }//fim do try
            catch( Exception exception ){

                exception.printStackTrace();
                System.exit( 1 );

            }//fim do catch

        }//fim do finally

    }//fim do método main

}//fim da classe displayAuthors

erro que dá ao executar o codigo acima no net beans 6.8

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/books
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at src.DispalysAuthors.main(DispalysAuthors.java:28)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
robert.gamma

Fala Mirah,

cara tenta por o nome do Driver e a URL entre parenteses:

static final String JDBC_DRIVER = ("com.mysql.jdbc.Driver");   
    static final String DATABASE_URL = ("jdbc:mysql://localhost/books");

Vê se rola!
Flw.

M

Novamente: o erro de “No suitable driver found” acontece quando o driver não está presente no classpath. Ainda acredito que esse seja o erro.

Outra coisa: sempre que for usar um “close()” em um bloco finally, você deve verificar se o objeto é diferente de null (para não causar um NullPointerException). Por exemplo:

}//fim do catch
        //assegura que a instrução e conecção sejam fechadas adequadamente
        finally{

            try{
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            }//fim do try
            catch( Exception exception ){

                exception.printStackTrace();
                // nesse caso não é um erro fatal, que deve fechar sua aplicação
                // System.exit( 1 );

            }//fim do catch

        }//fim do finally
Criado 18 de junho de 2010
Ultima resposta 24 de jun. de 2010
Respostas 21
Participantes 8