Partage
  • Partager sur Facebook
  • Partager sur Twitter

ConnexionMysql cannot be cast to com.mysql.jdbc.Co

23 mai 2018 à 18:44:01

Bonjour les openclassroomer, j'ai un petit problème de Java et je ne comprends surtout que je pense que l'erreur est idiote :

Voici mon code !

import java.awt.*;
import java.awt.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

import javax.swing.JTextField;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.DriverManager;
import java.sql.ResultSet;

import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.ImageIcon;

public class salle extends JFrame {

	private JPanel contentPane;
	private Connection con;
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					salle frame = new salle();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	

	/**
	 * Create the frame.
	 */
	public salle() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 865, 516);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblTerrainDisponibleSur = new JLabel("Terrain disponible sur le complexe sportif");
		lblTerrainDisponibleSur.setFont(new Font("Tahoma", Font.BOLD, 20));
		lblTerrainDisponibleSur.setBounds(220, 13, 429, 16);
		contentPane.add(lblTerrainDisponibleSur);
		
		JPanel panel = new JPanel();
		panel.setBackground(Color.CYAN);
		panel.setBounds(12, 42, 823, 10);
		contentPane.add(panel);
		
		JLabel lblTerrainDeFoot = new JLabel("Terrain de Foot");
		lblTerrainDeFoot.setFont(new Font("Tahoma", Font.BOLD, 15));
		lblTerrainDeFoot.setBounds(32, 88, 131, 16);
		contentPane.add(lblTerrainDeFoot);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBackground(Color.GREEN);
		panel_1.setBounds(32, 106, 120, 4);
		contentPane.add(panel_1);
		
		JButton btnFoot = new JButton("Foot - 1");
		btnFoot.setBounds(42, 134, 97, 25);
		contentPane.add(btnFoot);
		btnFoot.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent l) {
				
				try {
					
					con = (Connection) new ConnexionMysql();
					String query="select digicode from salles where id_salle=1";
					ResultSet set=((ConnexionMysql) con).sendQ(query);
					
					if(set.next() )
					{
						JOptionPane.showMessageDialog(null, "Le digicode du terrain Foot - 1 est " + set.getString("digicode"));
					} 
					
					else {
						JOptionPane.showMessageDialog(null, "Erreur");
					}					
					
					} catch (Exception e) {
						
						System.out.println(e);
						
					}
				
			}
				
			}
		);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class ConnexionMysql {
	
     private Statement st;
	Connection con = null;
	

	public static Connection ConnexionBdd() {
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost:8889/m2l?user=root&password=root");
			return con ;
		}catch(Exception e )
		{
			JOptionPane.showMessageDialog(null,e);
			return null;
		}

	}
	
	public ResultSet sendQ(String query) {
		ResultSet res = null;
		try {
			res = this.st.executeQuery(query);
		}catch(Exception e) {
			System.out.println(query);
		}
		return res;
	}

}



  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 22:55:37

Salut,

L'erreur survient à cause de ceci :

con = (Connection) new ConnexionMysql();

Tu ne peux pas caster ConnexionMysql en Connection, ce ne sont pas les mêmes objets. ConnexionMysql n'est pas une Connection, c'est une classe que tu as crée et qui n'hérite pas de Connection.

Je suppose que c'est plutôt quelque chose de ce style que tu aurais dû faire :

con = ConnexionMysql.ConnexionBdd();
  • Partager sur Facebook
  • Partager sur Twitter
Contrôleur programmeur des finances publiques depuis le 01/10/18
24 mai 2018 à 19:47:14

Je fais avec ta solution c'est ce que j'ai fais aussi pour ma fenetre login avec 

con = ConnexionMysql.ConnexionBdd();


Mais cela ne marche pas :/

Message d'erreur : 

Type mismatch: cannot convert from Connection to ConnexionMysql


-
Edité par JeremyTaverne1 24 mai 2018 à 19:50:51

  • Partager sur Facebook
  • Partager sur Twitter
24 mai 2018 à 21:46:55

L'erreur concerne une autre ligne cette fois-ci :

ResultSet set=((ConnexionMysql) con).sendQ(query);

Erreur similaire à la précédente : tu ne pouvais pas caster ConnexionMysql en Connection, tu ne peux pas non plus caster Connection en ConnexionMysql.

Tout en gardant les précédentes modifications, il faut remplacer la ligne par quelque chose de ce type :

ResultSet set = con.prepareStatement(query).executeQuery();

Tu pourras ensuite parcourir le résultat de ta requête avec une boucle :

while(set.next()){
  System.out.println(set.getString(1));
}
  • Partager sur Facebook
  • Partager sur Twitter
Contrôleur programmeur des finances publiques depuis le 01/10/18
25 mai 2018 à 0:20:06

J'ai trouvé et ca marche merci de tes conseils par contre j'ai pas fait la boucle pour l'instant j'ai pas eu besoin

Je te redis si j'ai des prochaines erreurs :) 

Je te montre demain comment j'ai fais et ce que je peux faire de mieux :)

  • Partager sur Facebook
  • Partager sur Twitter