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

Persistance des données Java Discussion :

[Strategie]persistance des données [Infos]


Sujet :

Persistance des données Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 19
    Points
    19
    Par défaut [Strategie]persistance des données
    Bonjour,

    J'ai modélisé mes classes d'objets et écrit mes méthodes mais, maintenant, j'aimerais sauvegarder les instances créées dans une base de données (le nombre d'objets sera important et la recherche dans la base doit être rapide).

    Quelles sont les possibilités ?
    Est-il possible d'utiliser la sérialisation ? La solution la plus simple est-elle de passer par une "base de données objet" ?

    Sinon, il me serait possible de faire une table de correspondance entre les variables des classes et les champs des tables de ma base de données. Dans ce cas existe-t-il des principes standardisés pour accélérer et automatiser ce traitement ?

    Merci d'avance...





    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Sinon, il me serait possible de faire une table de correspondance entre les variables des classes et les champs des tables de ma base de données. Dans ce cas existe-t-il des principes standardisés pour accélérer et automatiser ce traitement ?
    Il est possible via une mecanisme de mappage de table avec des classes.

    Exemple de mapping
    Dans cet exemple, nous allons prendre un type complexe souvent défini dans une base. Il s'agit du
    type Adresse, ce type contient les différentes informations d'une adresse (rue, numéro, code postal,
    pays, etc.). Regardons d'abord l'instruction pour créer ce type dans une base13.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TYPE Adresse(
    Rue VARCHAR( 50 ),
    Numero NUMBER,
    Boite VARCHAR( 5 ),
    CodePostal NUMBER,
    Locallite VARCHAR( 50 ),
    Pays VARCHAR( 25 )
    );
    Et voici, la classe Adresse qui sera associée au type Adresse.
    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
    /*
    * Adresse.java
    *
    * Création : 28-04-2004
    */
    import java.sql.SQLData;
    import java.sql.SQLInput;
    import java.sql.SQLOutput;
    import java.sql.SQLException;
    public class Adresse implements SQLData {
    private String m_Type = null;
    private String m_Rue = null;
    private int m_Numero = 0;
    private String m_Boite = null;
    private int m_CodePostal = 0;
    private String m_Localite = null;
    private String m_Pays = null;
    /** Creates a new instance of Adresse */
    public Adresse() {
    }
    public String getSQLTypeName() throws SQLException {
    return m_Type;
    }
    /**
    * Cette méthode lit les donnees dans la base
    */
    public void readSQL( SQLInput stream, String typeName ) throws SQLException {
    m_Type = typeName;
    m_Rue = stream.readString();
    m_Numero = stream.readInt();
    m_Boite = stream.readString();
    m_CodePostal = stream.readInt();
    m_Localite = stream.readString();
    m_Pays = stream.readString();
    }
    /**
    * Cette méthode ecrit les donnees dans la base
    */
    public void writeSQL( SQLOutput stream ) throws SQLException {
    stream.writeString( m_Rue );
    stream.writeInt( m_Numero );
    stream.writeString( m_Boite );
    stream.writeInt( m_CodePostal );
    stream.writeString( m_Localite );
    stream.writeString( m_Pays );
    }
    }
    Ici, il n'y a que les méthodes importantes qui sont implémentées. Mais rien n'empêche d'ajouter des
    méthodes qui permettent leur traitement dans Java (ex.: afficher les données dans la console). Le code
    pour associer la classe au type complexe est assez rudimentaire en voici les principales étapes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    java.sql.Connection con = ...;
    java.util.Map map = con.getTypeMap();
    map.put( "Beni.ADRESSE", Class.forName( "Adresse" ) );
    con.setTypeMap( map );
    javax.sql RowSet rs = new JdbcRowSet( con );
    ...
    Adresse adr = ( Adresse ) rs.getObject( "Colonne_Nom" );
    Ainsi, la liaison est bien effectuée entre le type complexe et la classe Java.
    PS : ceci est un extrait de mon TFE. @+

  3. #3
    duj
    duj est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Points : 474
    Points
    474
    Par défaut
    Ben sinon, il existe de nombreux framework squi permettent de faire un mapping objet - base de données relationnelle.

    Ils fournissent une API simple d'utilisation et les relations entre les champs de la base de donnée et les variables se font généralement dans un fichier xml.



    principalement hibernate : http://www.hibernate.org/


    mais aussi OJB : http://db.apache.org/ojb/

    et encore bien d'autres,...

  4. #4
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    Tout depend de la structure de ta table et des types d'acces en base.
    Si tu as beaucoup de relations et que tu dois les mettre beaucoup en oeuvre pour recuperer les données, le mapping, c'est moyen niveau performances. (en gros, quand t'as des grosses requetes)
    Si tu as peux de relations et que tu recuperes vraiment des "tables", le mapping, c'est genial! (d'ailleurs, c'est fait pour ca!)
    Si tu as pas mal de relations mais que tu recuperes surtout des "tables" seules, le mapping peut etre utilisé à condition qu'il soit bien configurer (cf "lazy" et "outer-join").

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Et JDO ?
    J'ai lu qu'il existait JDO (Java Data Objects)

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Points : 194
    Points
    194
    Par défaut
    Je n'ai pas vraiment d'experience avec JDO et OJB ... mais en tout si comme l'a dit viena, ton shema relationnel est relativement simple, Hibernate te simplifie vraiment la vie au niveau du mapping.
    En plus, leur site est bien fait, il y a des bons tutoriaux et le forum est actif!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par BigBeni

    Il est possible via une mecanisme de mappage de table avec des classes.

    Exemple de mapping
    Dans cet exemple, nous allons prendre un type complexe souvent défini dans une base. Il s'agit du
    type Adresse, ce type contient les différentes informations d'une adresse (rue, numéro, code postal,
    pays, etc.). Regardons d'abord l'instruction pour créer ce type dans une base13.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TYPE Adresse(
    Rue VARCHAR( 50 ),
    Numero NUMBER,
    Boite VARCHAR( 5 ),
    CodePostal NUMBER,
    Locallite VARCHAR( 50 ),
    Pays VARCHAR( 25 )
    );
    Et voici, la classe Adresse qui sera associée au type Adresse.
    [code]/*
    * Adresse.java
    *
    * Création : 28-04-2004
    */
    import java.sql.SQLData;
    import java.sql.SQLInput;
    import java.sql.SQLOutput;
    import java.sql.SQLException;
    public class Adresse implements SQLData {
    private String m_Type = null;
    private String m_Rue = null;
    private int m_Numero = 0;
    private String m_Boite = null;
    private int m_CodePostal = 0;
    private String m_Localite = null;
    private String m_Pays = null;
    /** Creates a new instance of Adresse */
    public Adresse() {
    }
    public String getSQLTypeName() throws SQLException {
    return m_Type;
    }
    PS : ceci est un extrait de mon TFE. @+
    donc 1 donnée = 1 objets?

    a combien de table et liens entre t'elle, vaut-t'il mieux éviter d'utiliser struct, obj?

Discussions similaires

  1. Persistance des données
    Par dominou73 dans le forum Framework .NET
    Réponses: 2
    Dernier message: 13/01/2008, 21h19
  2. PL/SQL - Cuseur / Persistance des données
    Par greg75 dans le forum PL/SQL
    Réponses: 0
    Dernier message: 20/08/2007, 14h52
  3. Persistance des données
    Par gdnico dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 16/05/2007, 17h31
  4. Réponses: 2
    Dernier message: 19/04/2007, 16h59
  5. Persistance des données en mémoire
    Par giviz dans le forum Architecture
    Réponses: 13
    Dernier message: 21/12/2004, 09h44

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