IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Afficher le résultat d'une requête SPARQL dans une interface


Sujet :

Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut Afficher le résultat d'une requête SPARQL dans une interface
    Bonjour,

    J'ai besoin d'interroger mon ontologie alors je pense que je dois utiliser SPARQL.

    J'aimerais faire afficher le résultat dans une interface (JTextPane par exemple) au lieu de la console.

    Comment puis-je également poser plusieurs requêtes en même temps ?

    Voici le code que j'ai réussi à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    import java.io.InputStream;
     
    import com.hp.hpl.jena.ontology.OntModel;
    import com.hp.hpl.jena.ontology.OntModelSpec;
    import com.hp.hpl.jena.query.Dataset;
    import com.hp.hpl.jena.query.DatasetFactory;
    import com.hp.hpl.jena.query.Query;
    import com.hp.hpl.jena.query.QueryExecution;
    import com.hp.hpl.jena.query.QueryExecutionFactory;
    import com.hp.hpl.jena.query.QueryFactory;
    import com.hp.hpl.jena.query.QuerySolution;
    import com.hp.hpl.jena.query.ResultSet;
    import com.hp.hpl.jena.query.ResultSetFormatter;
    import com.hp.hpl.jena.rdf.model.ModelFactory;
    import com.hp.hpl.jena.rdf.model.RDFNode;
    import com.hp.hpl.jena.util.FileManager;
    import com.hp.hpl.jena.vocabulary.RDF;
     
    public class Recupererinstance {
     
        private static Fenetre1 f;
        public static void main(String[] args){
            //charger le fichier de l'ontologie
        String monontologie=("F:/mastere/regle.owl");
            //creer un modele d'ontologie
             OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RDFS_INF);
             InputStream reader = FileManager.get().open(monontologie);
            if (reader == null) {
                throw new IllegalArgumentException("File: " + monontologie
                        + " not found"); }
     
            model.read(reader , "","RDF/XML");
            String rdfPrefix = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" ;
            String ontologyns="http://www.owl-ontologies.com/Ontology1400577325.owl#";
     
            /// nom de controlleur :
     
            String sparqlQuery = 
                    "PREFIX name:<http://www.owl-ontologies.com/Ontology1400577325.owl#>\n" +
                    "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
                    "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>\n" +
                    "PREFIX swrl:<http://www.w3.org/2003/11/swrl#>\n"+
                    "PREFIX swrlb:<http://www.w3.org/2003/11/swrlb#>\n"
     
                    +
                    "SELECT  ?y  \n" +
                    "WHERE {\n" +
                    "  ?y rdf:type name:homme" +
     
     
                    "} ";
     
               Query query = QueryFactory.create(sparqlQuery) ;
           Dataset dataset=DatasetFactory.create(model);
           QueryExecution qexec = QueryExecutionFactory.create(query,dataset) ;
               ResultSet resultset = qexec.execSelect() ;
     
     
               ResultSetFormatter.out(System.out,resultset,query) ;
     
             //Affichage du resultat
     
              while(resultset.hasNext()) {
     
            QuerySolution row = (QuerySolution)resultset.next();
     
            RDFNode  c= row.get("x");
            System.out.print(c.toString());
            f.pan.setText(resultset.toString());
     
        }}}
    Fentere1 est une autre classe contenant pan comme JTextPane(). J'essaie d'afficher le résultat en JTextPane mais malheureusement ça fonctionne pas.

    Quelqu'un saurait-il me guider un peu ?

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier Avatar de Schaublore
    Homme Profil pro
    Manuel
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Manuel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Points : 93
    Points
    93
    Par défaut
    Salut,

    Si la console affiche bien tes enregistrements via : System.out.print(c.toString());
    C'est que ton dernier enregistrement est vide. Et comme tu écrase le text du f.pan a chaque passage dans la boucle, le résultat est que rien ne s'affiche a la fin: "ça fonctionne pas"

    essay de construire ton text puis affecte le a JTextPane:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String text = "";
    while(resultset.hasNext()) {
            //...
            text += resultset.toString();
    }
    f.pan.setText(text);
    A+
    f(x) = y

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonsoir et merci pour la réponse ,
    j'essaie avec votre solution mais malheureusement je trouve ces erreurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.NullPointerException
    	at Recupererinstance.main(Recupererinstance.java:83)
    c'est au niveau de ce code:
    en exécutant la classe Fenetre1 dans JTextPane (pan) rien ne s'affiche)
    voici le code de l'appel du classe posté précédemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bouton.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent arg0)
    {
     
     
     new Recupererinstance();
    }
    }     );
    Merci beaucoup pour vos réponse

  4. #4
    Membre régulier Avatar de Schaublore
    Homme Profil pro
    Manuel
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Manuel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Points : 93
    Points
    93
    Par défaut
    L'erreur vient peut être d'ici
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    private static Fenetre1 f;

    Essaye
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.print(f.pan);
    Au niveau
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    f.pan.setText(texte);

    Si ce n'est pas ca, je ne peu pas plus t'aider mon ami...
    f(x) = y

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Merci. Malheureusement ça fonctionne pas.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Tu as un NullPointer donc un objet n'est pas instancié : Fenetre1 n'est a aucun moment instancié (ou alors j ai raté la ligne).

    Avant même d'utiliser ta variable f, il faut faire

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Merci.

    Je pense que cette instruction fait l'appel à la classe Fentre1 alors que mon idée est qu'à partir de fentre1, en cliquant sur le bouton (resultat), le résultat de la requête s'affiche dans le JTextPane.

    J'ai tenté avec ta proposition mais sans résultat.

    Voici le code de classe fenetre1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
     
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.JTextPane;
    public class Fenetre1 extends JFrame {
    private JPanel container = new JPanel();
    private JComboBox combo = new JComboBox();
    private JLabel label = new JLabel("Requette");
    JTextPane pan=new JTextPane();
    public Fenetre1(){
    this.setTitle("Animation");
    this.setSize(300, 300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);
    container.setBackground(Color.white);
    container.setLayout(new BorderLayout());
    combo.setPreferredSize(new Dimension(100, 20));
    combo.addItem("");
    combo.addItem("Name");
     
    combo.addItem("Composants");
    combo.addItem("critére2");
    combo.addItem("critére3");
    combo.addItem("critére5");
    JPanel top = new JPanel();
    top.add(label);
    top.add(combo);
     
    container.add(top, BorderLayout.NORTH);
    container.add(pan,BorderLayout.CENTER);
    JButton bouton = new JButton("resultat");
    JPanel pa = new JPanel();
    bouton.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent arg0)
    {
     
     
     new Recupererinstance();
    }
    }     );
    pa.add(bouton);
    container.add(pa,BorderLayout.SOUTH);
    this.setContentPane(container);
    this.setVisible(true);
    }
    public static void main(String[] args) throws IOException {
        Fenetre1 ac = new Fenetre1();
        ac.setVisible(true);
    }
    }
    Merci d'avance pour votre aide.

  8. #8
    Membre régulier Avatar de Schaublore
    Homme Profil pro
    Manuel
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Manuel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Points : 93
    Points
    93
    Par défaut
    ahlemrhayem,

    Remplace:
    "new Recupererinstance();"

    Par
    worker.makeYourJob(pan);

    Avec:
    private Recupererinstance worker;
    Comme membre de la class Fenetre1


    PS: Pense bien a ce que t'as dis notre ami

    ----------
    Je suis ni pour, ni contre, bien au contraire
    f(x) = y

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    "makeYouJob" c'est une méthode que je dois créer dans Récupérerinstance et qui contient le requête ?
    Merci

  10. #10
    Membre régulier Avatar de Schaublore
    Homme Profil pro
    Manuel
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Manuel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Points : 93
    Points
    93
    Par défaut
    Exactement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public class DvzWindow extends JFrame {
    	public JLabel pan = new JLabel("La patience est une vertue");
    	//private DvzFriend worker;// SamusStrife a la solution
     
    	public DvzWindow() {
    		this.setTitle("DvzWindow");
    		this.setSize(300, 300);
    		this.setContentPane(pan);
    		this.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				System.out.print("Click");
    				//worker.makeYourJob(pan);
    			}
    		}
    	}
     
    	public static void main(String[] args) throws IOException {
    		DvzWindow ac = new DvzWindow();
    		ac.setVisible(true);
    	}
    }
    PS: N'oublie pas le message de SamusStrife
    f(x) = y

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Voici mon essaie qui est malheureusement sans résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    import java.io.InputStream;
    import java.util.List;
     
    import javax.swing.JTextPane;
     
    import com.hp.hpl.jena.ontology.OntModel;
    import com.hp.hpl.jena.ontology.OntModelSpec;
    import com.hp.hpl.jena.query.Dataset;
    import com.hp.hpl.jena.query.DatasetFactory;
    import com.hp.hpl.jena.query.Query;
    import com.hp.hpl.jena.query.QueryExecution;
    import com.hp.hpl.jena.query.QueryExecutionFactory;
    import com.hp.hpl.jena.query.QueryFactory;
    import com.hp.hpl.jena.query.QuerySolution;
    import com.hp.hpl.jena.query.ResultSet;
    import com.hp.hpl.jena.query.ResultSetFormatter;
    import com.hp.hpl.jena.rdf.model.ModelFactory;
    import com.hp.hpl.jena.rdf.model.RDFNode;
    import com.hp.hpl.jena.util.FileManager;
    import com.hp.hpl.jena.vocabulary.RDF;
     
    public class Recupererinstance {
     
        private static Fenetre1 f;
        public static void main(String[] args) throws Exception{
    window (f.pan);
               }
    public static void  window(JTextPane pan) throws Exception{
     
        String monontologie=("F:/mastere/application.owl");
        //creer un modele d'ontologie
         OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RDFS_INF);
         InputStream reader = FileManager.get().open(monontologie);
        if (reader == null) {
            throw new IllegalArgumentException("File: " + monontologie
                    + " not found"); }
     
        model.read(reader , "","RDF/XML");
        String rdfPrefix = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" ;
        String ontologyns="http://www.owl-ontologies.com/Ontology1400577325.owl#";
     
        /// nom de controlleur :
     
        String sparqlQuery = 
                "PREFIX :<http://www.owl-ontologies.com/Ontology1400577325.owl#>\n" +
                "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
                "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>\n" +
                "PREFIX swrl:<http://www.w3.org/2003/11/swrl#>\n"+
                "PREFIX swrlb:<http://www.w3.org/2003/11/swrlb#>\n"
     
                +
                "SELECT ?etudiant ?seance \n" +
                "WHERE {\n" +
                "?etudiant rdf:type :etudiant.\n" +
                "{{?etudiant :start ?seance.\n}" +
     
                "} ";
     
           Query query = QueryFactory.create(sparqlQuery) ;
     
     
       Dataset dataset=DatasetFactory.create(model);
       QueryExecution qexec = QueryExecutionFactory.create(query,dataset) ;
           ResultSet resultset = qexec.execSelect() ;
     
     
           ResultSetFormatter.out(System.out,resultset,query) ;
     
           String texte =""; 
     
          while(resultset.hasNext()) {
     
        QuerySolution row = (QuerySolution)resultset.next();
     
        RDFNode  c= row.get("x");
        System.out.print(c.toString());
        texte = resultset.toString();
     
    }
          f = new Fenetre1();
       f.pan.setText(texte) ;
     
        }
    }
    Quelle est donc mon erreur ?

    Merci d'avance.

  12. #12
    Membre régulier Avatar de Schaublore
    Homme Profil pro
    Manuel
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Manuel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Points : 93
    Points
    93
    Par défaut
    Voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class Fenetre1 extends JFrame {
        public JTextPane pan = new JTextPane();
        private Recupererinstance worker;// ....
     
        public Fenetre1() {
            this.setTitle("watch?v=CrpAk_S3CFQ");
            this.setSize(300, 300);
            this.setContentPane(pan);
            this.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    System.out.print("Click");
                    System.out.print(worker);
                    worker.makeYourJob(pan);/* new Recupererinstance(); */
                }
            }
        }
     
        public static void main(String[] args) throws IOException {
            Fenetre1 ac = new Fenetre1();
            ac.setVisible(true);
        }
    }
    f(x) = y

  13. #13
    Membre régulier Avatar de Schaublore
    Homme Profil pro
    Manuel
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Manuel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Points : 93
    Points
    93
    Par défaut Obs
    Salut l'Ami,

    Toujours pas de nouvelle

    Par hazard, peut être que ca t'a échapp. Moi oui. Tu pourrais utiliser le design pattern Singleton pour ta class Recupereinstance.

    Quand je ne comprend pas, ca m'enerve. C'est pour ca que je vien m'expliquer. Je n'ai pas compris ce code:
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main(String[] args) throws Exception{
        window (f.pan);// je ne sais pas ce qu'est window
                             // f n'a pas été affecté
    }


    Bref! Je suis impatient de savoir comment tu as résolut ton problème. Et c'est là mon plus grand défault :/ Mais je suis sùr que d'autre personnes aimerai aussi savoir si c'est une subtilité du langage Java qui t'a échappé. Dans ce cas n'hésite pas a soliter de l'aide au besoin pour le corriger.

    Je vais m'imaginer que tu lis des cours/tutoriels sur la programmation Java (Et je sais que ça prend de temps, beaucoup de temps même, mais pas tant que ca non plus pour qui sais chercher) sans oublier les autres cours en parallèles et que tu à surement une vie de famille autrement dis ta propre vie...

    (Tu dis que tu as tes partiels très bientot) Alors à très bientôt ahlemrhayem,
    f(x) = y

  14. #14
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonjour mon ami et Merci pour vos aides,
    Heureusement je trouve la solution, au lieu d'utiliser String il faut utiliser StringBuilder
    voici le code pour ce qui trouve les mêmes problèmes
    merci bien mon ami
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    StringBuilder builder = new StringBuilder();
    while(resultset.hasNext()) {
     
        QuerySolution row = (QuerySolution)resultset.next();
     
        RDFNode c = row.get("x");
        builder.append(c.toString());
        builder.append('\n');
    }
    f.pan.setText(builder.toString());

  15. #15
    Membre régulier Avatar de Schaublore
    Homme Profil pro
    Manuel
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Manuel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Points : 93
    Points
    93
    Par défaut
    Merci à toi


    Comme d'habite je ne lis que la moitié de la notice et ne voi pas les astérix écrie en tout petit

    Alors je l'écrie en gros pour moi et qui veut.


    Java provides the StringBuffer and String classes, and the String class is used to manipulate character strings that cannot be changed. Simply stated, objects of type String are read only and immutable. The StringBuffer class is used to represent characters that can be modified.

    The significant performance difference between these two classes is that StringBuffer is faster than String when performing simple concatenations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import java.lang.StringBuffer;
     
    public class HelloWorld {
     
        public static void main(String[] args) {
            String foo = new String(" ");
            String text = "Hello";
            text += foo;// text est écrasé par une nouvelle instance String
            text += "Worlt";//TODO: corriger l'orthographe
            System.out.println(text + " !");
    	// et je m'étais arreté là
     
            //text[17] = "d"; String class is read only
            StringBuffer sb = new StringBuffer(text);//FIXME: StringBuilder insteadof StringBuffer
            sb.setCharAt(10, 'd');
            text = sb.toString();// nouvelle instance String
     
            System.out.println(text + " !");
     
            // I lose !
        }
    }
    Enfin tout est bien expliqué ici : http://www.javaworld.com/article/207...us-string.html

    Mais du coup je ne comprend pas pourquoi ca ne pouvais pas fonctionner avec un String. Tu as une idée ?
    f(x) = y

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Re-Bonjour (bonsoir pour le coup )

    Bon j'ai lu ce qui a été écrit et je vais être honnête : je n'ai jamais fait de SPARQL donc je peux clairement me tromper.

    D'après le code que j'ai vu, il n'y a aucune raison qu'avec String ça ne marche pas (je tiens a préciser que je me suis concentrer sur la boucle où était l'erreur).

    Donc je vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while(resultset.hasNext()) {
     
        QuerySolution row = (QuerySolution)resultset.next();
     
        RDFNode  c= row.get("x");
        System.out.print(c.toString());
        texte = resultset.toString();
     
    }
    Et la solution serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    StringBuilder builder = new StringBuilder();
    while(resultset.hasNext()) {
     
        QuerySolution row = (QuerySolution)resultset.next();
     
        RDFNode c = row.get("x");
        builder.append(c.toString());
        builder.append('\n');
    }
    Il n'y a aucune différence si ce n'est que le résultat demandé n'est pas le même : dans le premier code je vois qu'on demande la valeur String de l'objet resultset alors qu'apparemment on voudrait la valeur de c (RDFNode) forcément le résultat n'est pas bon du coup

    La seule réelle différence entre String et StringBuilder (en plus que StringBuilder puisse "stocker" plus de caractères et est plus rapide a l'exécution) c'est que String est "immutabe" c'est à dire non modifiable (chaque méthodes que vous utilisez dans String comme subString renvoi la String résultat et ne modifie pas l'objet courant). De plus avec la première version du code on écrase SYSTEMATIQUEMENT texte, il aurait fallut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte += c.toString() + "\n";

  17. #17
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bnojour SamusStrife,
    désolé mais je ne sais pas c'est quoi la différence entre StringBuilder et String.
    je trouve que ce morceau de code répond à mes besoins donc je le mets pour aider l'autre

  18. #18
    Membre régulier Avatar de Schaublore
    Homme Profil pro
    Manuel
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Manuel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Points : 93
    Points
    93
    Par défaut
    Salutation,

    java stringbuilder

    PS: D'après mes souvenir, StringBuilder est synchrone et StringBuffer non
    f(x) = y

  19. #19
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Schaublore Voir le message
    Salutation,

    java stringbuilder

    PS: D'après mes souvenir, StringBuilder est synchrone et StringBuffer non
    Merci bien mon ami

  20. #20
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Schaublore Voir le message
    PS: D'après mes souvenir, StringBuilder est synchrone et StringBuffer non
    En fait, StringBuffer est "synchronisé" (a des méthodes d'écriture et lecture synchronized) et StringBuilder non. Un StringBuffer peut donc être partagé entre plusieurs threads, alors que StringBuilder, non (erreurs possibles ou résultat incohérent en cas d'accès concurrents).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Jena] Affichage du résultat d'une requête SPARQL dans une page JSP
    Par info_dekh dans le forum Frameworks
    Réponses: 1
    Dernier message: 18/06/2012, 11h54
  2. Réponses: 1
    Dernier message: 12/12/2011, 10h07
  3. Réponses: 6
    Dernier message: 31/05/2010, 14h12
  4. erreur dans une requête sql dans une fonction php
    Par frboyer dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2009, 13h37
  5. [Requête] Utilisation d'une fonction perso dans une requête
    Par Julien Dufour dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/03/2007, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo