Communication POSTGRESQL et JAVA
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Communication POSTGRESQL et JAVA



  1. #1
    Malo99

    Communication POSTGRESQL et JAVA


    ------

    Bonjour à tous,

    Je m’appelle Malo et je suis étudiant informatique. Je dois réaliser un projet pour valider une matière.

    L’idée c’est de travailler sur la communication Postgresql et Java. J’ai commencé par créer ma base de données sur Postgresql avec toutes les tables qu’il faut, de ce côté la aucun soucis, la requête que je souhaiterais exécuter sur l’interface graphique est toute simple, je veux sélectionner une photo (de la table image) selon son id, select nom from image where id = "3" par exemple…

    Lorsque je compile et que je lance mon code j’ai la fenêtre qui s’ouvre avec les deux champs comme ceci. Mais quand je mets par remplis le champs id j’ai ce message d’erreur qui s’affiche dans le terminal de commande : Bad value for timestamp/date/time …

    Je vous mets le code et la capture d’écran si ça peut aider, et si quelqu’un peut m’aider je serai reconnaissant. Je galère depuis des jours et je bloque sur ça.

    Capture.JPG

    Capture2.JPG
    Code:
    import java.awt.BorderLayout;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    
    public class FenetreBD extends JFrame implements ActionListener {
    
    	private static final long serialVersionUID = 6194625107521090236L;
    
    	private JTextField txtIdImage;
    	private JTextField txtNomImage;
    	private JButton btnValider;
    	private Connection c;
    	private Statement stmt;
    	private JLabel lblConnection;
    	
    	public FenetreBD(String titre, int largeur, int hauteur){
    		super(titre);
    		this.setSize(largeur, hauteur);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.instanciate();
    		this.create();
    		this.connection();
    	    this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent we) {
    				try {
    					c.close();
    					stmt.close();
    					System.out.println("Closed database successfully");
    				}
    				catch(Exception e){
    					System.err.println(e.getClass().getName()+": "+e.getMessage());
    					System.exit(0);
    				}
                }
            });
    	}
    	
    	private void connection(){
          try {
             Class.forName("org.postgresql.Driver");
             this.c = DriverManager
                .getConnection("jdbc:postgresql://localhost:5432/Photographie",
                "postgres", "etudiant");
    		  this.stmt = c.createStatement();
          } catch (Exception e) {
             e.printStackTrace();
             System.err.println(e.getClass().getName()+": "+e.getMessage());
             System.exit(0);
          }
          System.out.println("Opened database successfully");
    	  this.lblConnection.setText("The database is ready");
    	}
    	
    	private void instanciate(){
    		this.lblConnection = new JLabel();
    		this.txtIdImage = new JTextField(10);
    		this.txtNomImage = new JTextField(10);
    		this.btnValider = new JButton("Valider");
    		this.btnValider.addActionListener(this);
    	}
    	
    	private void create(){		
    		JPanel monConteneur = new JPanel();
    		monConteneur.setLayout(new BorderLayout());
    		
    		JPanel panelDate = new JPanel();
    		panelDate.add(new JLabel("Id de l'image : "));
    		panelDate.add(this.txtIdImage);
    		panelDate.add(this.btnValider);
    		
    		
    		JPanel panelReponse = new JPanel();
    		panelReponse.add(new JLabel("Nom de l'image : "));
    		panelReponse.add(this.txtNomImage);
    		
    		monConteneur.add(panelDate, BorderLayout.PAGE_START);
    		monConteneur.add(panelReponse, BorderLayout.CENTER);
    		monConteneur.add(lblConnection, BorderLayout.PAGE_END);
    
    		
    		this.getContentPane().add(monConteneur);
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		
    		if (arg0.getSource() == this.btnValider){
    			try {
    				String id = (String)this.txtIdImage.getText();
    				String requete = "select nom from image where id ='"+id+"';";
    				ResultSet rs = stmt.executeQuery(requete);
    				if (rs.next()){
    					String nom =  String.valueOf(rs.getTime("nom"));
    					this.txtNomImage.setText(nom);
    				}
    				rs.close();
    			}
    			catch(Exception e){
    				System.err.println( e.getClass().getName()+": "+ e.getMessage() );
    				System.exit(0);
    			}
    			
    		}
    		
    	}
    	
    }

    -----

  2. #2
    Ikhar84
    Animateur Informatique

    Re : Communication POSTGRESQL et JAVA

    Cette partie pose problème (pour le moment):
    Code:
    rs.getTime("nom")
    GetTime s'attend a trouver une date (DateTime, Timestamp,...) et là tu lui donne un string "incastable" (mot compte triple !) en date.

    Note: indentation et structure illisible !

    Edit: je te laisse deviner par quoi remplacer Time.
    Dernière modification par Ikhar84 ; 05/05/2019 à 12h27.
    J'ai glissé Chef !

  3. #3
    pm42

    Re : Communication POSTGRESQL et JAVA

    A la louche, je dirais que ça vient de ton rs.getTime("nom"). Je suppose que "nom" est une colonne de type varchar ou text et là, tu demandes sa valeur comme si c'était une date.
    Tu devrais essayer avec rs.getString("nom").

  4. #4
    Malo99

    Re : Communication POSTGRESQL et JAVA


    Youhouuuuuuuuuuuuuuuuuuuuuuuuu uuuu Je te remercie

    C'est génial, oui en fait j'avais oublié de modifier un code que j'avais fais juste avant sur un autre exemple...
    Merci pour la note je vais essayer d'arranger ça

    Merciiiiiiiiiiiiii

  5. A voir en vidéo sur Futura
  6. #5
    Malo99

    Re : Communication POSTGRESQL et JAVA


    Mercii, j'ai essayé avec rs.getString("nom") et ça a marché !! C'est génial tu me sauve la vie

  7. #6
    Malo99

    Re : Communication POSTGRESQL et JAVA

    Salut

    Alors j'ai une deuxième question j’espère que j'arriverais à bien expliquer mon problème, la j'ai juste changé ma requête, je veux par exemple afficher le nom des photos prise par un photographe, j'ai mis le code pour que vous voyez ce que j'ai mis comme requête

    Le soucis c'est que il devrait y avoir 2 lignes d'affichés (càd deux images prises par le photographe) comme c'est le cas de ce qui s'affiche dans postresql quand j'essaye la requête, la j'ai que la première ligne ...

    Ce qui s'affiche : Capture3.JPG
    Alors que normalement : Capture4.JPG


    Code:
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		
    		if (arg0.getSource() == this.btnValider){
    			try {
    				String prenom = (String)this.txtIdImage.getText();
    				String requete ="select image.nom as nom from image inner join photographe on photographe.id = image.photographe_id where photographe.nom='"+prenom+"';";
    				ResultSet rs = stmt.executeQuery(requete);
    				if (rs.next()){
    					String nom =  String.valueOf(rs.getString("nom"));
    					this.txtNomImage.setText(nom);
    				}
    				rs.close();
    			}
    			catch(Exception e){
    				System.err.println( e.getClass().getName()+": "+ e.getMessage() );
    				System.exit(0);
    			}
    			
    		}
    		
    	}

  8. #7
    pm42

    Re : Communication POSTGRESQL et JAVA

    Tu as mis "if(rs.next())" donc tu ne prends que la 1ère ligne si elle existe.
    Il faut que tu mettes une boucle while. C'est bien documenté dans tous les tutoriaux sur Jdbc.
    Après, il faut que tu trouves une façon d'afficher chaque ligne. Soit dans une zone de texte qui peut scroller, soit idéalement dans une jtable mais c'est plus de travail.

  9. #8
    Malo99

    Re : Communication POSTGRESQL et JAVA

    D'accord je vais essayer de le faire mais ça a l'air compliqué, c'était surtout pour avoir des points bonus ^^

    L'objectif principal c'était juste de réaliser une interface graphique avec une action sur la bdd

    Merci beaucoup d'avoir pris le temps de me répondre

Discussions similaires

  1. Java RXTX Communication Série Arduino OutPutStream
    Par leoleoleo24 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 10/11/2016, 16h33
  2. Communication P2P en Java
    Par kilwa dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 20/11/2013, 21h58
  3. Communication entre 2 applications en Java à travers Internet
    Par kilwa dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 04/10/2013, 10h23
  4. générer une BdD postgresql via python
    Par invite4a2d9efc dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 14/06/2011, 18h24
  5. PostgreSQL et Free
    Par invite25acea8a dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 10/08/2008, 15h48