Com.mysql.jdbc.JDBC4Connection cannot be cast to research.Connection

17 respostas
S

Tenho 3 classes:
Classe Connection, classe JFrame e classe Research

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package research;

import java.sql.*;
import javax.swing.JOptionPane;
/**
 *
 * @author André Vinícius Lopes
 */
public class Connection {
    
    public static void main ( String args[])
    {
  
    //PlayersDataBase.getConexaoMySQL();
    //PlayersDataBase.statusConection();
    //PlayersDataBase.SelectTest(); 

    try
    {
        Class.forName("com.mysql.jdbc.Driver");
        
        String serverName = "localhost";    //caminho do servidor do BD
        String mydatabase = "MySQL";        //nome do seu banco de dados
        String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
        String username = "root";        //nome de um usuário de seu BD      
        String password = "root";      //sua senha de acesso

        Connection conn = (Connection) DriverManager.getConnection(url, username, password);
        
        Statement stm = conn.createStatement();
        
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
     
}

    private Statement createStatement() {
        throw new UnsupportedOperationException("Not yet implemented");
          
    }
    
    public static void insert(String x)
    {
        
         try
    {
        Class.forName("com.mysql.jdbc.Driver");
        
        String serverName = "localhost";    //caminho do servidor do BD
        String mydatabase = "mysql";        //nome do seu banco de dados
        String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
        String username = "root";        //nome de um usuário de seu BD      
        String password = "root";      //sua senha de acesso

        Connection conn = (Connection) DriverManager.getConnection(url, username, password);
        
        Statement stm = conn.createStatement();
        ResultSet rs = stm.executeQuery(x);
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
        JOptionPane.showMessageDialog(null, e.getMessage());
        
    }
       
    }
    
    public static void select(String y)
    {
       
    try
    {
        Class.forName("com.mysql.jdbc.Driver");
        
        String serverName = "localhost";    //caminho do servidor do BD
        String mydatabase = "mysql";        //nome do seu banco de dados
        String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
        String username = "root";        //nome de um usuário de seu BD      
        String password = "root";      //sua senha de acesso

        Connection conn = (Connection) DriverManager.getConnection(url, username, password);
        
        Statement stm = conn.createStatement();
        ResultSet rs = stm.executeQuery(y);
         while (rs.next())
        {
            double virus = rs.getDouble("answer");
            double id = rs.getInt("idvolunteers");
            double reality = 0;
            reality = (id / virus);
            
            JOptionPane.showMessageDialog(null,reality + " " + " persons per virus ");
           
            
        }
        
    }
     
        
    catch(Exception e)
    {
        System.out.println(e.getMessage());
        JOptionPane.showMessageDialog(null, e.getMessage());
        
    }
      

    }
    

}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * JFrame.java
 *
 * Created on 16/12/2011, 10:26:25
 */
package research;

/**
 *
 * @author André Vinícius Lopes
 */
public class JFrame extends javax.swing.JFrame {

    /** Creates new form JFrame */
    public JFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 0, 0));

        jLabel1.setBackground(new java.awt.Color(255, 255, 255));
        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 255, 255));
        jLabel1.setText("=UPEO= Researchs  ");

        jButton1.setText("First Question");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Results Of First Question");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jLabel2.setText("Made by Lopes and Weiner, all rights are left!");

        jLabel3.setText("Beta Version 1.0a");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(44, 44, 44)
                .addComponent(jLabel1)
                .addGap(66, 66, 66)
                .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(151, 151, 151)
                .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 108, Short.MAX_VALUE)
                .addComponent(jButton2)
                .addGap(31, 31, 31))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel3)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(33, 33, 33)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 156, Short.MAX_VALUE)
                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Research.FirstQuestion();
        
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Research.ResultsOfFirstQuestion();
    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(JFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new JFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    // End of variables declaration                   
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 * Program that do Research and Take Values to my On-line DataBase
 * 
 * 
 */
package research;

import java.sql.*;
import javax.swing.JOptionPane;

/**
 *
 * @author André Vinícius Lopes
 */
public class Research {
     
     public static int answer;
    public static double Volunteers;
    public static double answersOne;
    public static double results;
  
     public Research() {
         
        
         
    }
     
    public static void main(String[] args) {
       JFrame.main(args);
       Connection.main(args);
       
    }
    
    
    public static void FirstQuestion()
    {
        String aux = JOptionPane.showInputDialog(null,"How many Virus You Got This Month ?");
        
        //Transforma o valor de aux em Int
        answer = Integer.parseInt(aux);
        
        //A resposta deve ir para o banco de dados
    
        String x = "Insert into dba values ( 1 ,1, '" +answer+ "')";
        Connection.insert(x);
        
        
        
    }
    
    
    public static void ResultsOfFirstQuestion()
    {
        //Número de pessoas:
        //Volunteers
        //A resposta deve VIR do banco de dados
        
        //Número de virus:
        //answersOne
        //A resposta deve Vir Do banco de dados
        
        //Resultados da média
       
        
        
        String y = "Select * from dba ";
        Connection.select(y); 
    }
    
    
    
    
}

Está causando erro com.mysql.jdbc.JDBC4Connection cannot be cast to research.Connection

antes disso, estava dando outro erro
Communications link failure Last packet sent to the server was 0 ms ago.

Voces podem me ajudar?
Estou usando mysql + netbeans

17 Respostas

S

Gente, realmente preciso de ajuda, estou pesquisando na net, achei alguma coisa assim, mas ainda nao entendi pq nao funciona meu código…

Enfim, preciso de 3 dicas:

O que é framework para mysql + java + netbeans ?

Preciso fazer uma conexao ao bd apenas no main ou em todo método?

Qual o método para ver se o programa conseguiu se conectar no banco de dados?

VLW POVO !!!

GENTE, EU SEI QUE DA TRABALHO ME AJUDAR< MAS POR FAVOR, QUERO MUITO FAZER ESSE PROGRAMA E NAO CONSIGO!!! ME AJUDEM PLS

V

Boa tarde Andre Lopes

Olha nao sei se bem isso que voce procura, mais essa em classe feita para fazer conexoes com banco de dados voce so altera para qual banco voce vai usar e legal ela funciona…

A respeito de quando fazer a conexao ? Toda vez que voce precisar fazer algo no banco, tipo consultas , iserir etc.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;
/**
 *
 * @author Vitorassi
 */
public class ConexaoBanco {

    private static Connection conexao;

    public ConexaoBanco() throws Exception {
        try {
            if (conexao != null && !conexao.isClosed()) {
                return;
            }
            Class.forName("/*nome do driver do seu banco no meu caso org.postgresql.Driver"*/");
            conexao = DriverManager.getConnection(
                    " /*aqui subistua pelo caminho do seu banco no meu caso /jdbc:postgresql://localhost:5432/vitorassi /*", "usuario do banco", "senha");
            conexao.setAutoCommit(false);
            conexao.setTransactionIsolation(
                    Connection.TRANSACTION_READ_COMMITTED);
        } catch (ClassNotFoundException cnf) {
            System.out.println(cnf.getStackTrace());
            throw new Exception("Driver n&#65533;o encontrado!");
            
            
        } catch (SQLException sql) {
            throw new Exception("Falha ocorrida: " + sql.getMessage());
        }
    }

    public Connection getConexao() {
        return conexao;
    }

    public void fechar() throws Exception {
        try {
            if (conexao == null || conexao.isClosed()) {
                return;
            }
            conexao.close();
        } catch (SQLException sql) {
            throw new Exception("Falha ocorrida: " + sql.getMessage());
        }
    }

    public void confirmarTransacao() throws Exception {
        try {
            if (conexao == null || conexao.isClosed()) {
                return;
            }
            conexao.commit();
        } catch (SQLException sql) {
            throw new Exception("Falha ocorrida: " + sql.getMessage());
        }
    }

    public void cancelarTransacao() throws Exception {
        try {
            if (conexao == null || conexao.isClosed()) {
                return;
            }
            conexao.rollback();
        } catch (SQLException sql) {
            throw new Exception("Falha ocorrida: " + sql.getMessage());
        }
    }
}

para testar se a classe funcionou e esta tudo certo com sua conexao e so chamar o como abaixo, so vai pedir para colocar um throws Exception no meto que chama, e pronto a primei classe vai te disser se olve ou nao conecao.

ConexaoBanco cc =new ConexaoBanco();

Espero ter ajudado qualquer coisa posta ai

S

mas quando eu tento colocar um insert da erro… vc poderia olhar minhas 3 classes acima? pq eu tento fazer o que vc disse e da erro

V

vc ta colocando o insert onde?

a classe qeu eu passei so faz a conecao, para inserir e fazer update ten que cria os metodos nas classe DAO.

veja um exemplo, uma classe cidadeDAO onde eu fasso toda a percisstencia do obejto cidade, nela como atributo eu tenho so a conexao, depois tenho o construtor, e os metodos para inserir e update e etc

public class CidadeDAO {

    private ConexaoBanco cc;

    public CidadeDAO() throws Exception {
        cc = new ConexaoBanco();
    }

    public void incluir(/*Objeto que ta tentando fazer a percistecia */Cidade c) throws Exception {
        PreparedStatement pst = /*cc e a classe conexao, voce abre a conexao*/cc.getConexao().prepareStatement(
                /*passa o sql */"INSERT INTO CIDADE (NOME,ID_ESTADO) VALUES(?,?)/*os ? sao para diser que voce vai passar alguma coisa como parametro*/",
                Statement.RETURN_GENERATED_KEYS);
     
        pst.setString(1, c.getNome());/*para cada um ? voce passa um parametro na ordem 1,2,3 e por tipo */
        pst.setInt(2, c.getCondigoEstado());
        pst.executeUpdate();
        cc.confirmarTransacao();/*fecha a conexao*/
        pst.close(); /* e fecha o PreparedStatement  */

/*se voce ainda quiser pode colocar try, e na Execao voce usar o metodo cancelar que tem na classe conexao pq se de algume erro ele fecha a conexao*/
    }
}
// para chamar a percistencia voce deve immportar a classe DAO onde vai usar 

// para usar e so passar o obejeto por parametro
new cidadeDAO().incluir(/*objeto nesse caso*/ cidade);

voce pode fazer assim para upadate tambem…

C

Posta o StackTrace que fica mais facil de descobrir qual é o erro…

edit: Uma duvida boba, mas voce importou o jar com o driver do mysql?

S

Muito OBRIGADO POR RESPONDER! FIQUEI ATÈ FELIZ, achei que ninguem ia responder mais rsrsrsrs…

Como eu posto o stacktrace?

C

Andre Lopes:
Muito OBRIGADO POR RESPONDER! FIQUEI ATÈ FELIZ, achei que ninguem ia responder mais rsrsrsrs…

Como eu posto o stacktrace?

Me tira essa duvida primeiro, voce importou o driver do mysql?

C

Andre Lopes:
Muito OBRIGADO POR RESPONDER! FIQUEI ATÈ FELIZ, achei que ninguem ia responder mais rsrsrsrs…

Como eu posto o stacktrace?

Irmaozinho acho que achei o problema…pelo menos um deles e acredito que o mais grave. O nome da tua classe ta atrapalhando bastante…rs…muda o nome dessa tua classe Connection ai…pq ela ta “cobrindo” a classe java.sql.Connection que tem o mesmo nome. Entao quando voce chama Connection aqui:

Connection conn = (Connection) DriverManager.getConnection(url, username, password); (linha 32 da sua classe connection)

na verdade voce esta chamando a SUA classe connection e nao a java.sql.Connection que deveria ser o certo. Inclusive voce ta tendo que fazer esse cast ai(esse Connection entre parenteses na frente). Na verdade esse cast nao deveria ser necessario. Tua IDE deve ta reclamando pedindo esse cast explicito ai pq o DriverManager retorna uma java.sql.Connection mas a tua variavel conn é do tipo Connection da tua classe…Voce tem duas opcoes:

1 - trocar o nome da tua classe connection ou fazer assim:

java.sql.Connection conn = DriverManager.getConnection(url, username, password);

Lembre-se de fazer isso em todos os locais que voce cria uma variavel do tipo Connection. Na linha 62 tbm tem…e tem mais umas 2 vezes eu acho. Trocando o nome da classe nao sera necessario fazer isso, apenas refatorar de dentro da sua IDE a sua Connection para outro nome.

S

carlos, deu certo, VLW MESMO, JA ESTAVA DESISTINDO, mudei o nome da minha classe para “letter” e troquei os connection conn, do jeito que voce colocou, só por precaução, em todo caso,esta tendo dois erros

Can not issue data manipulation statements with executeQuery().

O outro erro, parece que é por causa que eu não estou conseguindo me conectar no mysql, vou postar uma screenshot de como eu montei o server e talvez voces possam me ajudar:

http://imageshack.us/photo/my-images/803/semttulovk.jpg/

o login é : root
a senha é : root

Voces podem me ajudar a configurar o endereço? eu estou me confundindo um pouco! Tipo, url , host não seriam a mesma coisa…?

Vlw gente! estou até feliz rsrsrsrs

C

Andre Lopes:
carlos, deu certo, VLW MESMO, JA ESTAVA DESISTINDO, mudei o nome da minha classe para “letter” e troquei os connection conn, do jeito que voce colocou, só por precaução, em todo caso,esta tendo dois erros

Can not issue data manipulation statements with executeQuery().

O outro erro, parece que é por causa que eu não estou conseguindo me conectar no mysql, vou postar uma screenshot de como eu montei o server e talvez voces possam me ajudar:

http://imageshack.us/photo/my-images/803/semttulovk.jpg/

o login é : root
a senha é : root

Voces podem me ajudar a configurar o endereço? eu estou me confundindo um pouco! Tipo, url , host não seriam a mesma coisa…?

Vlw gente! estou até feliz rsrsrsrs

Acabei de chegar =D
Bom o primeiro erro eu ja esperava que ocorresse…so nao falei nada pq tava com um pouco de pressa xD. Voce esta usando executeQuery pra fazer o insert. Voce deve usar apenas execute() para fazer o insert. Execute query como o nome diz é pra query…=D

O segundo erro nao sei exatamente do que voce esta falando. A url de conexao esta correta. Isso se voce tiver uma base chamada mysql é claro…Se tiver no seu DB uma base com nome mysql esta tudo ok.

S

http://imageshack.us/photo/my-images/803/semttulovk.jpg/

Olhando aqui na foto, então seria mysql55 ???

String serverName = “localhost”; //caminho do servidor do BD
String mydatabase = “MySQL55”; //nome do seu banco de dados
String url = “jdbc:mysql://” + serverName + “/” + mydatabase;
String username = “root”; //nome de um usuário de seu BD
String password = “root”; //sua senha de acesso

??? Seria isso? mas nao tenho um servername chamado localhost …

Não estou entendendo…

C

Andre Lopes:
http://imageshack.us/photo/my-images/803/semttulovk.jpg/

Olhando aqui na foto, então seria mysql55 ???

String serverName = “localhost”; //caminho do servidor do BD
String mydatabase = “MySQL55”; //nome do seu banco de dados
String url = “jdbc:mysql://” + serverName + “/” + mydatabase;
String username = “root”; //nome de um usuário de seu BD
String password = “root”; //sua senha de acesso

??? Seria isso? mas nao tenho um servername chamado localhost …

Não estou entendendo…

Esta correto. É localhost. localhost é uma chamada interna no protocolo TCP que faz referencia a sua propria maquina. Quanto ao nome do DB acho que nao vou poder ajudar amigo…voce ja entrou no seu DB pelo proprio mysql pra ver se ele existe? É la onde deveriam estar as suas tabelas…

S

vlw cara, deu tudo certo, consegui dar insert, select, update, e talz.

Consegui até fazer o auto increment funcionar… mas agora estou com um problema rsrsrsrs

tentei fazer uma conta chamada “user” e senha : “user” , e fazer o programa se conectar , mas da erro… eu configurei no mysql , mas nao esta funcionando…
O que será que pode estar acontecendo?

Eu fiz assim:
abri o mysql workbench, fui em users e privilege,dei add , e dei todas as permissoes ao user, e salvei.
E agora da erro de acesso negado!

Me ajuda pls ?

S

ok, consegui resolver, só troquei o % por local host e foi!

Agora preciso fazer de um jeito, que uma pessoa consiga se conectar ao meu banco de dados, via internet!

Alguém pode me indicar um tutorial ?

C

Basta voce trocar o localhost pelo endereço da sua maquina na rede. Vai ser dificil se voce tiver IP dinamico. Voce deve passar o IP e a porta TCP do seu banco. Acho que é isso nao lembro direito.

S

aff , eu tenho ip dinamico… eu precisaria hostear meu banco de dados em algum lugar!

Pior que ja fiz um post e nao rolou nao… sei la
e agora?

C

Dificil viu amigo…voce vai ter que contratar um servidor. Ou entao pagar por um ip fixo.

Criado 17 de dezembro de 2011
Ultima resposta 19 de dez. de 2011
Respostas 17
Participantes 3