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

JDBC Java Discussion :

No enclosing instance ( générécité)


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut No enclosing instance ( générécité)
    Bonjour,
    débutant en développement, je voudrais insérer dans ma base des éléments d'une classe obtenus par instanciation de la classe dans ma classe main.
    je vous donner un aperçu de ma méthode insérer
    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
     
    public <T> void inserer_BDD(T table ) throws SQLException {
    		// TODO Auto-generated method stub
    		Connection conn = null;
     
    		try {
    			connection_BDD("PARC", "machine", "dba",
    					"jdbc:oracle:thin:@localhost:1521:");
    			PreparedStatement prstm = conn.prepareStatement("INSERT INTO "+ table+ "(MARQUE_COMPOSANT, MODELE_COMPOSANT, TYPE_COMPOSANT, NOM_COMPOSANT, TAILLE, ACHAT_COMPOSANT) VALUES (?, ?, ?, ?, ? , ?)");
    			prstm.setString(2, Ecran.this.getMarque());
    			prstm.setString(3, Ecran.this.getModele());
    			prstm.setString(4, Ecran.this.getType());
    			prstm.setString(5, "ECRAN");
    			prstm.setFloat(6, Ecran.this.getTaile());
    			prstm.setString(7, Ecran.this.getDateAchat());
    			prstm.executeUpdate();
    			conn.commit();
    			System.out.println("*** Insersiton OK ***");
    			prstm.close();
    			conn.close();
    		} catch (Exception e) {
    			System.out.println(" ### Insersiton échoué ###");
    			e.printStackTrace();
    		}
    	}
    et dans les codes de la classe main j'ai ceci
    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
     
    public class MainParc  {
    public static void main(String[] args) throws IOException, ParseException,
    			ClassNotFoundException, DatesException, IpException, NumAfpaException, SQLException, InstantiationException, IllegalAccessException {
    final OracleBDD orcl = new OracleBDD();
    .
    .
    .
    Ecran e1 = new Ecran("SAMSUNG", "913N", "LCD", 19.0, "25-10-2008");
    .
    .
    .
    orcl.inserer_BDD("COMPOSANT");
    .
    .
    .
    et normalement, je voudrais insérer les éléments de l'écran e1 dans la Base. merci de votre aide

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Et bien quand tu lui parles d'écran dans ta méthode d'insertion, il ne trouve pas d'instance de la classe écran à utiliser.

    Au lieu de passer en paramètre le nom de ta table, tu devrais lui donner une instance d'Ecran.

    De plus passer le nom de la table ne sert pas à grand chose je pense car les colonnes sont vraiment spécifiques à cette table ...

  3. #3
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    tu as tout à fait raison, je m'en suis rendu compte. en tout cas c'est vrai qu'en passant en paramètre une instance écran, celà marche bien. Je voudrais savoir une chose, n'existe-t-il pas une générécité pour faire une insertion sur n'importe qu'elle table? juste pour savoir du genre
    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 <T> void inserer_BDD(T Object, T table, T champs, T valeurs ) throws SQLException {
    Connection conn = null;
    try {
    connection_BDD("PARC", "machine", "dba","jdbc:oracle:thin:@localhost:152:");
    System.out.println(" Entrer le nombre de champs ");
    Scanner sc = new Scanner(System.in);
    int chp = sc.nextInt();
    PreparedStatement prstm = conn.prepareStatement("INSERT INTO "+ table+ champs+"VALUES"+ valeurs);
    for (int i = 1; i > chp ; i++){
    prstm.setString(i, (class reférente)Objet.get(Variable de la classe référente)());<------ Voilà mon soucis, normlement ici doit changer en fonction de l'objet à instancier
    }
    prstm.executeUpdate();
    conn.commit();
    System.out.println("*** Insersiton OK ***");
    prstm.close();
    conn.close();
    } catch (Exception e) {
    System.out.println(" ### Insersiton échoué ###");
    e.printStackTrace();
    }
    }
    Merci pour votre aider

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    une généricité ca va etre dur, car pour sauver sur la db, tu va avoir besoin de connaitre le type réel de l'objet a sauver. Par contre, il existe déjà des frameworks comme hibernate qui te fournissent des api capable de mappers des objets vers des bases de données transactionnelles. Avec ce genre d'api t'as plus qu'à appeler, par exemple, un méthode appelée save(Object o) pour sauver dans la db ton objet et une méthode appelée Object get(Serializable id, Class theClass) pour charger depuis la db. Bref, y a moyen de faire du code multifonction, mais dans ce cas ci, pas avec des generics.

  5. #5
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Merci, pour tes précisions. je pense que je vais me contenter de faire mes méthodes en fonction de mes besoins et éviter une générécité en ce moment.

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

Discussions similaires

  1. Erreur "No enclosing instance of type ..."
    Par johanndebutant dans le forum Débuter
    Réponses: 5
    Dernier message: 12/02/2014, 14h11
  2. Problème "No enclosing instance of the type is accessible in scope"
    Par Ludix_ dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 20/01/2014, 13h58
  3. enclosing instance is requiered
    Par scolyo dans le forum Langage
    Réponses: 7
    Dernier message: 21/06/2006, 17h00
  4. [VB6]Passer le focus à une instance précedente
    Par Jeremiah dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 16/09/2003, 10h01
  5. [] plusieurs instances de form avec leur contexte ?
    Par Seb-31 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/04/2003, 13h56

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