Partage
  • Partager sur Facebook
  • Partager sur Twitter

Singleton + requete

    2 mars 2021 à 16:56:54

    Bonjour, 

    Pour un projet je dois créer une application avec une BDD et je dois utiliser le pattern Singleton. 

    J'ai bien crée ma classe Singleton (ici DatabaseConnection.java) et je tente de faire une requête SQL dans une autre classe (Landing.java). 

    Mais je ne comprend pas pourquoi lors de l'execution du programme J'ai cette erreur : "The method createStatement() is undefined for the type DatabaseConnection"

    Classe DatabaseConnection : 

    package Interface;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DatabaseConnection {
    	
    	private static DatabaseConnection instance;
    	private Connection connection;
    	private String url = "jdbc:mysql://localhost:3306/mydb?";
    	private String username = "root";
    	private String password = "";
    	
    	//Constructeur privé
    	private DatabaseConnection() throws SQLException{
    		try {
    			Class.forName("com.mysql.cj.jdbc.Driver");
    			this.connection = DriverManager.getConnection(url,username,password);
    		}catch(Exception e) {
    			e.printStackTrace();
    			System.out.println("Impossible de se connecter a la base: "+e.getMessage());
    		}
    	}
    	
    	public Connection getConnection() {
    		return connection;
    	}
    	//Point d'accès UNIQUE Singleton
    	public static DatabaseConnection getInstance() throws SQLException
    	{
    		//Si non existante -> création instance
    		
    		if(instance == null) {
    			instance = new DatabaseConnection();
    		}else if (instance.getConnection().isClosed()) {
    			instance = new DatabaseConnection();
    	}return instance;
    	}
    
    }
    

    Classe Landing.java : 

    package Interface;
    
    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    
    public class Landing extends JFrame {
    
    	private JPanel contentPane;
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					Landing frame = new Landing();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	/**
    	 * Create the frame.
    	 */
    	public Landing() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		contentPane.setLayout(new BorderLayout(0, 0));
    		setContentPane(contentPane);
    	
    	
    	try {
    		Statement state = DatabaseConnection.getInstance().createStatement();
    		ResultSet result=state.executeQuery("select * from utilisateur");  
    
    		
    		while(result.next()) {
    			System.out.println(result.getString(0));
    		}
    			
    		}catch(SQLException e) {
    			
    		}
    	}
    	
    
    }
    
    

    Je tourne en rond depuis 2h et je ne trouve pas la solution, si quelqu'un aurais une petite aide je suis preneur.. 

    Merci  

    • Partager sur Facebook
    • Partager sur Twitter
      2 mars 2021 à 21:25:01

      Hello,

      d'après le message d'erreur il manque une méthode createStatement dans la classe DatabaseConnection. Ou tu peux changer le code dans la classe Landing:

      DatabaseConnection.getInstance().getConnection().createStatement();



      -
      Edité par rybla 2 mars 2021 à 21:25:50

      • Partager sur Facebook
      • Partager sur Twitter

      Singleton + requete

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown