Partage
  • Partager sur Facebook
  • Partager sur Twitter

TRANSFERT DES DONNES d'une base de donnes via des Sockets

c++ vers java a l'aide des sockets

    13 septembre 2011 à 16:49:35

    bonjour a tous ,
    je dois faire un programme en java qui permet de récupérer des données dans une base de données PHP et après envoyer ces donnes vers un serveur via des Socket
    voila le programme qui me permet de charger la base de donnes
    /*package donnees;*/
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    import java.util.StringTokenizer;
    
    import org.cvisproject.cint.eda.sdk.gis.coordinatesystem.positionning.RAWPosition;
    import org.cvisproject.cint.eda.sdk.gis.interfaces.IRoadElement;
    import org.cvisproject.cint.eda.sdk.gis.interfaces.IMapArea;
    import org.cvisproject.cint.eda.sdk.gis.interfaces.position.IRAWPosition;
    import org.cvisproject.cint.eda.sdk.gis.mapformat.MapArea;
    import org.cvisproject.cint.eda.sdk.gis.mapformat.RoadElement;
    import org.cvisproject.cint.eda.sdk.gis.mapformat.RoadNode;
    import org.cvisproject.cint.eda.sdk.logger.Logger;
    
    import java.io.*;
    import java.net.*;
    public class basededonnees {
    
    	protected IRAWPosition 					m_BeginPos, m_EndPos;
    
    	protected HashMap<String, IRoadElement> 		m_Elements;
    	protected HashMap<String, IRoadElement> 		m_Elements_bis;
    	//ouverture de la base de données
    	static final private String driver = "com.mysql.jdbc.Driver";
    	static final private String url_db = "jdbc:mysql://localhost/balicosal";
    	
    	Connection con=null;
    	Statement s = null;	
    	int i=0;
    	//fin
    		
    	public basededonnees() {
    		//ouverture de base
    		ConnectBase(); 
    		
    		m_BeginPos    = null;
    		m_EndPos      = null;
    		
    		m_Elements    = new HashMap<String, IRoadElement>();
    		m_Elements_bis    = new HashMap<String, IRoadElement>();
    	}
    
    	public void ConnectBase() {
    		
    		try {
    			/** Etape 1: charger le pilote */
    			Class.forName(driver);
    
    			DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    			/** Etape 2: Etablissement de la connexion à la base de données */
    			con = DriverManager.getConnection(url_db, user, passwd);
    			
    			/** Etape 3: produire le Statement */
    			s = con.createStatement();
    			
    			System.out.println("driver load successfully");
    
    		} catch (Exception e) {
    			System.out.println("echec pilote : " + e);
    			System.exit(1);
    		}		
    	}
    
    	public void DeConnectBase() {
    		
    		try {
    			con.close();
    
    		} catch (Exception e) {
    			
    		}		
    	}
    
    	 
    
    	
    }
    


    maintenant je dois envoyer la base vers un serveur.a noter que la programmation du serveur pour la réception se fait en C++.pour l'instant je veux assurer l'envoie en java.
    merci d'avance. :D
    • Partager sur Facebook
    • Partager sur Twitter
      13 septembre 2011 à 20:57:21

      Citation : akram250585

      bonjour a tous ,
      je dois faire un programme en java qui permet de récupérer des données dans une base de données PHP



      Je me suis arrêté là... c'est quoi une base de données PHP ???
      • Partager sur Facebook
      • Partager sur Twitter
        13 septembre 2011 à 23:30:31

        Souhaites-tu faire communiquer un programme client Java avec un serveur C++ ?
        • Partager sur Facebook
        • Partager sur Twitter
          14 septembre 2011 à 3:06:31

          Tu as des spécifications à respecter ? Ou tu peux faire comme tu veux pour la transmission des données et tu as la main sur le serveur et le client à la fois ?

          Sinon, +1 pour le coup de la BDD PHP... De quoi tu parles ?
          • Partager sur Facebook
          • Partager sur Twitter
            14 septembre 2011 à 11:47:46

            je souhaites faire un envoie du données par un client java vers un serveur c++
            • Partager sur Facebook
            • Partager sur Twitter
              14 septembre 2011 à 18:41:37

              Tu veux dire que tu peux faire ce que tu veux tant que c'est du Java d'un côté et du C++ de l'autre ? C'est toi qui codes les deux côtés, rien n'est imposé ?
              • Partager sur Facebook
              • Partager sur Twitter
                15 septembre 2011 à 0:22:52

                Transfert de données entre 2 serveur ?
                Pour info on à inventé un truc super pour ça : les web services.
                Et en plus c'est normalisé...

                Non parce que sinon pourquoi pas faire le transfert bit à bit aussi... ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  15 septembre 2011 à 10:20:37

                  public synchronized Collection<IRoadElement> getRoadElementsIn(IRAWPosition _pt, double _rayon) {
                  		Date eDate=new Date();
                  		
                  		int k=0,l=0,m=0;
                  		String attributes;
                  		String table;
                  		String clause;
                  		ResultSet res;
                  		String ID;
                  		String LENGTH;
                  		String NAME;
                  		String SENS;
                  		String COMMON;
                  		String FW;
                  		String REF;
                  		String slatlon;
                  		int all_geo_seg;
                  		double LATITUDE;
                  		double LONGITUDE;
                  		double latmin,latmax,lonmin,lonmax;
                  		StringTokenizer tokenizer,tokenizer2;
                  		ArrayList<String> eltToRemove= new ArrayList<String>();	
                  		
                  		if(s == null) return null;
                  
                  		if(m_Pos != null ) {
                  			if(   (m_Pos.get_long() == _pt.get_long()) && (m_Pos.get_lat() == _pt.get_lat())
                  			     &&  m_Elements_bis != null)
                  				 return null;
                  		}
                  
                  		//System.out.println("nbre elements depart"+m_Elements_bis.size() );
                  		//on tag les elements pour ne pas les remplir plusieurs fois
                  		for (String selt: m_Elements_bis.keySet()) {
                  			m_Elements_bis.get(selt).setiupdate(0);
                  		}
                  		
                  		m_Pos  = _pt;
                  		
                  		latmin=_pt.get_lat()- _rayon;
                  		latmax=_pt.get_lat()+ _rayon;
                  		lonmin=_pt.get_long()- _rayon;
                  		lonmax=_pt.get_long()+ _rayon;
                  		
                  		//récupération de tous les  segments
                  		attributes   = "segment.id_seg,segment.name,segment.nature,segment.ref,segment.sens,segment.common,AsText(geometry)";
                  		table   = "segment";
                  		clause = "MBRIntersects(GeomFromText('POLYGON((" + 
                  		 latmin + " " + lonmin + "," + 
                  		 latmin + " " + lonmax + "," + 
                  		 latmax + " " + lonmax + "," +
                  		 latmax + " " + lonmin + "," + 
                  		 latmin + " " + lonmin + "))'),geometry)";
                  		try {
                  			this.s.executeQuery("SELECT " + attributes + " FROM " + table +  " WHERE " + clause);
                  			res =s.getResultSet();
                  			res.beforeFirst();
                  			while (res.next()) {
                  				m++;
                  				ID     = res.getString(1);
                  				LENGTH = "100";
                  				NAME   = res.getString(2);
                  				FW     = res.getString(3);
                  				REF = res.getString(4);
                  				SENS   = res.getString(5);
                  				COMMON = res.getString(6);
                  				slatlon = res.getString(7);
                  								
                  				if (m_Elements_bis.containsKey(ID)){
                  					m_Elements_bis.get(ID).setiupdate(1);
                  				} else {
                  					RoadElement elt = new RoadElement();
                  					elt.setiupdate(2);
                  					elt.setID(ID);
                  					elt.setLength(Double.valueOf(LENGTH));
                  					elt.setName(NAME);
                  					elt.setDirection(IRoadElement.Direction.getDirectionForOpenStreetMap(SENS));
                  					elt.setNature(FW);
                  					elt.setRef(REF);
                  					
                  					//segment communs
                  					ArrayList allSegCommuns = new ArrayList();
                  					if (COMMON!=null){
                  					tokenizer = new StringTokenizer(COMMON);
                  					while (tokenizer.hasMoreTokens()){
                  						allSegCommuns.add(tokenizer.nextToken());						
                  					}
                  					}
                  elt.setCommon(allSegCommuns);
                  					//geometry
                  					IRAWPosition[] geoms = null;
                  					slatlon=slatlon.substring(11, slatlon.length()-1);
                  					tokenizer = new StringTokenizer(slatlon,",");
                  					all_geo_seg=tokenizer.countTokens();
                  					geoms = new IRAWPosition[all_geo_seg];
                  					int j=0;
                  					while (tokenizer.hasMoreTokens()){
                  						String mlatlon=tokenizer.nextToken();
                  						tokenizer2 = new StringTokenizer(mlatlon);
                  						LATITUDE   = Double.valueOf(tokenizer2.nextToken());
                  						LONGITUDE = Double.valueOf(tokenizer2.nextToken());
                  						geoms[j++] = new RAWPosition(LONGITUDE, LATITUDE, 0.0);
                  					}
                  					elt.setGeometry(geoms);
                  					
                  					m_Elements_bis.put(elt.getID(), elt);					
                  				}
                  								
                  			  } 			
                  		} catch (Exception e) {			
                  			System.out.println("Probleme lecture DB Segment ");			
                  		}
                  		//System.out.println("nbre Segments trouvés"+ m);
                  		for (String selt: m_Elements_bis.keySet()) {
                  			if (m_Elements_bis.get(selt).getiupdate()==2) {
                  				k++;
                  				getSpeedInDB(selt); 
                  			}	   
                  		}   
                  	   
                  	    //on remove les elements non taggés
                  		//tous les elements à 0 sont à effacer,on les stocke	   
                  		for (String selt: m_Elements_bis.keySet()) {
                  			if (m_Elements_bis.get(selt).getiupdate()==0) {
                  				l++;
                  				eltToRemove.add(selt);				
                  			}
                  		}	
                  		for (i=0;i<eltToRemove.size();i++){
                  	    	m_Elements_bis.remove(eltToRemove.get(i));
                  	    }
                  	    
                  		//System.out.println("nbre elements updates"+k );
                  	    //System.out.println("nbre elements deletes"+l );
                  	   	//System.out.println("nbre elements "+m_Elements_bis.size() );	
                  		setArrayElement(m_Elements_bis);
                  		
                  		Date sDate=new Date();
                  		//System.out.println("temps DB = "+ (sDate.getTime()-eDate.getTime()));
                  				
                  		return m_Elements_bis.values();
                  	}
                  
                  	public synchronized Collection<IMapPOI> getPOIIn(IRAWPosition _beg, IRAWPosition _end) {
                  		
                  		String attributes;
                  		String table;
                  		String clause;
                  		String order;
                  		ResultSet res;
                  		double LATITUDE;
                  		double LONGITUDE;
                  		int VALUE;
                  		int ID_POI;
                  		RAWPosition rp = null;
                  				
                  		//récupération panel
                  		String typePanel="Panel";
                  		attributes   = "id_poi,latitude,longitude,value";
                  		table   = "poi";
                  		clause = "(longitude BETWEEN "+ _beg.get_long() + " AND " + _end.get_long() + " AND " +
                  	    "latitude BETWEEN "+ _beg.get_lat()  + " AND "  + _end.get_lat() + ")" + " AND type = " + "\""+ typePanel + "\"" ;
                  		order="id_poi";
                  		try{
                  			this.s.executeQuery("SELECT " + attributes + " FROM " + table + " WHERE " + clause+ " ORDER BY " + order);
                  			res =s.getResultSet();
                  			res.beforeFirst();
                  			while (res.next()) {
                  				ID_POI=res.getInt("ID_POI");
                  				LATITUDE   = res.getDouble("latitude");
                  				LONGITUDE = res.getDouble("longitude");	
                  				VALUE = res.getInt("value");	
                  				MapPOI poi=new MapPOI(ID_POI, LATITUDE, LONGITUDE,VALUE);
                  				m_POI.put(ID_POI, poi);		
                  			} 
                  			
                  		} catch (Exception e) {
                  			System.out.println("Probleme lecture DB POI ");
                  		}
                  		
                  		//récupération vehicule
                  		typePanel="Vehicule";
                  		attributes   = "id_poi,latitude,longitude,value";
                  		table   = "poi";
                  		clause = "(longitude BETWEEN "+ _beg.get_long() + " AND " + _end.get_long() + " AND " +
                  	    "latitude BETWEEN "+ _beg.get_lat()  + " AND "  + _end.get_lat() + ")" + " AND type = " + "\""+ typePanel + "\"" ;
                  		order="id_poi";
                  		try{
                  			this.s.executeQuery("SELECT " + attributes + " FROM " + table + " WHERE " + clause+ " ORDER BY " + order);
                  			res =s.getResultSet();
                  			res.beforeFirst();
                  			while (res.next()) {
                  				ID_POI=res.getInt("ID_POI");
                  				LATITUDE   = res.getDouble("latitude");
                  				LONGITUDE = res.getDouble("longitude");	
                  				VALUE = res.getInt("value");
                  				MapPOI poi=new MapPOI(ID_POI, LATITUDE, LONGITUDE,VALUE);
                  				m_POI.put(ID_POI, poi);		
                  			} 
                  			
                  		} catch (Exception e) {
                  			System.out.println("Probleme lecture DB POI ");
                  		}
                  		
                  		setArrayPOI(m_POI);
                  		
                  		return m_POI.values();
                  	}
                  

                  ici j'ai récupéré les données de la base .comment je peux réaliser une table qui contient que la latitude et la longitude du véhicule et après l'envoyer via les Socket
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 septembre 2011 à 14:54:06

                    //récupération géomètrie
                    		String typePanel="Vehicule";
                    		attributes   = "id_poi,latitude,longitude,value";
                    		table   = "poi";
                    		clause = "(longitude BETWEEN "+ _beg.get_long() + " AND " + _end.get_long() + " AND " +
                    	    "latitude BETWEEN "+ _beg.get_lat()  + " AND "  + _end.get_lat() + ")" + " AND type = " + "\""+ typePanel + "\"" ;
                    		order="id_poi";
                    		try{
                    			this.s.executeQuery("SELECT " + attributes + " FROM " + table + " WHERE " + clause+ " ORDER BY " + order);
                    			res =s.getResultSet();
                    			
                    			res.beforeFirst();
                    			while (res.next()) {
                    				ID_POI=res.getInt("ID_POI");
                    				LATITUDE   = res.getDouble("latitude");
                    				LONGITUDE = res.getDouble("longitude");	
                    				VALUE = res.getInt("value");	
                    				MapPOI poi=new MapPOI(ID_POI, LATITUDE, LONGITUDE,VALUE);
                    				m_POI.put(ID_POI, poi);	
                    				resultatDest requete =null;
                    				
                    				// resultatDest.getInt(1):permet de recuperer LATITUDE  resultatDest.getInt(2) recuperer LONGITUDE
                    				ResultSet resultatDest = requete.executeQuery("select * from T_destinations");
                    				
                    	              System.out.println(resultatDest.getInt(1)+"  "+resultatDest.getString(2));
                    	              IRAWPosition p	=getRAWPosition();
                    					//chargement des elements de la BD
                    					boolean bNotStarted=false;
                    					if(p != null) if ( resultatDest.getInt(1)==0.0 && resultatDest.getInt(2)==0.0) bNotStarted=true;
                    					if(p != null && !bNotStarted) {
                    						map_engine.setMapBoundaries(new RAWPosition(resultatDest.getInt(1)-0.015,resultatDest.getInt(2)-0.010,0.0),new RAWPosition(resultatDest.getInt(1)+0.015,resultatDest.getInt(2)+0.010,0.0));
                    						Collection<IRoadElement> network = getFormattedRoadElementInArea(new RAWPosition(resultatDest.getInt(1)-0.014, resultatDest.getInt(2)-0.009, 0.0),	new RAWPosition(resultatDest.getInt(1)+0.014, resultatDest.getInt(1)+0.009,0.0));
                    						map_engine.setMapElementsNetwork(network);
                    						Collection<IMapPOI> poi1 = getFormattedPOIInArea(new RAWPosition(resultatDest.getInt(1)-0.014,resultatDest.getInt(1)-0.009,0.0),new RAWPosition(resultatDest.getInt(1)+0.014,resultatDest.getInt(2)+0.009,0.0));
                    						map_engine.setPOI(poi1);
                    				  }
                    					//_________________
                    						    
                    					
                    					//_________________
                    					
                    					
                    	            }
                    

                    ce code contient une requête Select qui me permet de recuperer les donees maintenant je voudais savoir comment je peux les envoyer via des sockets.svp aidez moi :(
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 septembre 2011 à 8:45:33

                      Hello, je pense que tu pourrais trouvez la réponse à ta question par toi même sur internet il y a beaucoup de tutoriel sur les socket en java il te sufffit d'aller sur un moteur de recherche et d'écrire "socket java" et voilà tu sera utiliser les sockets en un rien de temps, ensuite pour l'implémenter dans ton code rien de plus simple tu sort un String de ton résultat et tu l’envoie sur ton socket voilà bonne chance
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 septembre 2011 à 15:45:20

                        j'ai fait des recherches mais je trouve pas la solution si t'a des liens ou un code merci de m la donner je suis coincé et ma soutenance de fin d’étude sera le 30septembre
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 septembre 2011 à 12:24:29

                          http://www.google.fr/search?aq=f&gcx=c [...] q=java+socket

                          Les deux premier résultat sont excellant.

                          Mais je le répète, l'utilisation de socket n'est pas adapter.

                          Un petit conseil. Répond xau questions que l'on te pose quand on te demande des précision.

                          Citation : Coyote

                          Tu veux dire que tu peux faire ce que tu veux tant que c'est du Java d'un côté et du C++ de l'autre ? C'est toi qui codes les deux côtés, rien n'est imposé ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 septembre 2011 à 13:20:02

                            Tu veux dire que tu peux faire ce que tu veux tant que c'est du Java d'un côté et du C++ de l'autre ? C'est toi qui codes les deux côtés, rien n'est imposé ?

                            réponse: oui je dois faire une liaison client java serveur C++ .mais avant je dois envoyer cette requête via des Sockets vers le serveur C++ .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 septembre 2011 à 14:15:03

                              Oui mais pourquoi des sockets ?
                              C'est une contrainte projet ?
                              Ou c'est toi qui à décider de te taper un délire sur les sockets ?

                              Parce que le socket c'est un flux entre 2 machine, donc il faut que tu transforme tes donner en flux (byte ou string) pour le faire passer. C'est pas ultra pratique.

                              Pour des volume de données, si tu peut faire du soap c'est plus adapté.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 septembre 2011 à 14:33:27

                                import java.net.*;
                                import java.sql.ResultSet;
                                import java.sql.SQLException;
                                import java.sql.resultatDest;
                                import java.io.*;
                                
                                public class client {
                                    public static void main(String argv[]) throws SQLException {
                                	Socket s = null;
                                	resultatDest requete =null;
                                	ResultSet resultatDest = requete.executeQuery("select * from T_destinations");
                                	try {
                                	    
                                	    // on crée une connexion vers le service port entré en parametre sur la machine 
                                	    s = new Socket("localhost", 12001);
                                	    System.out.println(resultatDest.getDouble(1)+"  "+resultatDest.getDouble(2));
                                	    BufferedReader sin = new BufferedReader(new InputStreamReader(s.getInputStream())); 
                                	    PrintWriter sout = new PrintWriter(s.getOutputStream());
                                
                                	    System.out.println(s.getPort());
                                
                                	    // on envoie la lattitude
                                	    sout.println(resultatDest.getDouble(1)+"");
                                	    sout.flush();
                                	    //on envoie la longitude
                                	    sout.println(resultatDest.getDouble(1)+"");
                                	    sout.flush();
                                	    
                                	}
                                	catch (UnknownHostException e) {
                                	    System.err.println("La machine est inconnue"); 
                                	}
                                	catch (IOException e) {
                                	    System.err.println("Erreur d'entrée-sortie"); 
                                	};
                                
                                    }
                                }
                                

                                ce code me permet d'envoyer les données déjà sélectionnée par la requête .est-t-il juste ce code ou non?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  22 septembre 2011 à 16:46:03

                                  Ça à l'air.

                                  Mais tu devrai identidier tes donner dans l'envoie, car à la sortie tu ne saura pas si c'est une lat ou une long.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 septembre 2011 à 14:14:40

                                    maintenant coté serveur C++ que dois je faire?
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    TRANSFERT DES DONNES d'une base de donnes via des Sockets

                                    × 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