17
TD Java - Oracle 03/01/2006 1/17 JAVA & ORACLE Avant de commencer… Java est un langage développé par Sun. L’objectif de Java est d’offrir : un langage permettant une exécution «standardisée» des programmes sans réécriture ni recompilation, ainsi qu’une maintenance «simplifiée» des programmes écrits. Pour définir Java, on peut dire que Java est un langage : – «indépendant» de la plate-forme d’exécution ; – orienté objet ; – adapté à la distribution, et au développement, d’applications en réseau. Il ne faut pas envisager Java comme un «simple» langage de programmation. En effet, l’installation de Java ne se borne pas à l’installation d’un compilateur, mais d’un ensemble d’outils. Java se compose de quatre éléments principaux : 1. le langage de programmation et le «compilateur» Java ; 2. la Java Virtual Machine (JVM) assurant l’exécution des programmes Java ; 3. l’API Java : un ensemble de classes qui peuvent être utilisées par le programmeur; 4. un ensemble d’outils permettant la mise en oeuvre de solutions logicielles : par exemple permettant la gestion des documentations des applications, offrant des possibilités de création d’applications distribuées… Avant d’envisager le développement d’applications Java, il faut avant toute chose installer un kit de développement, c’est à dire l’ensemble des outils permettant la création de programmes. Nous avons choisi d’utiliser dans le cadre de ce TD l’environnement de développement « NETBEANS » afin de se connecter à une Base de données « ORACLE ». Découverte de l’IDE (Integrated Development Environement) NETBEANS Netbeans est téléchargeable sur le site de Sun (www.sun.com). La version actuelle est 4.1. Il y a une version 5.0 en Bêta. Vérifier qu’il est bien installé sur votre poste en l’exécutant.

TD COURS Netbeans - dcanl.free.frdcanl.free.fr/Etudes/COURS_IUT_IQ2/BDD3/TD/TD3/TD_COURS_Netbeans.pdf · TD Java - Oracle 03/01/2006 3/17 Créer votre premier projet JAVA avec NETBEANS

  • Upload
    vucong

  • View
    234

  • Download
    0

Embed Size (px)

Citation preview

TD Java - Oracle 03/01/2006

1/17

JAVA & ORACLE Avant de commencer…

Java est un langage développé par Sun. L’objectif de Java est d’offrir : un langage permettant une exécution «standardisée» des programmes sans réécriture ni recompilation, ainsi qu’une maintenance «simplifiée» des programmes écrits.

Pour définir Java, on peut dire que Java est un langage : – «indépendant» de la plate-forme d’exécution ; – orienté objet ; – adapté à la distribution, et au développement, d’applications en réseau. Il ne faut pas envisager Java comme un «simple» langage de programmation. En

effet, l’installation de Java ne se borne pas à l’installation d’un compilateur, mais d’un ensemble d’outils. Java se compose de quatre éléments principaux :

1. le langage de programmation et le «compilateur» Java ; 2. la Java Virtual Machine (JVM) assurant l’exécution des programmes Java ; 3. l’API Java : un ensemble de classes qui peuvent être utilisées par le

programmeur; 4. un ensemble d’outils permettant la mise en oeuvre de solutions logicielles : par

exemple permettant la gestion des documentations des applications, offrant des possibilités de création d’applications distribuées…

Avant d’envisager le développement d’applications Java, il faut avant toute chose installer un kit de développement, c’est à dire l’ensemble des outils permettant la création de programmes. Nous avons choisi d’utiliser dans le cadre de ce TD l’environnement de développement « NETBEANS » afin de se connecter à une Base de données « ORACLE ».

Découverte de l’IDE (Integrated Development Environement) NETBEANS

Netbeans est téléchargeable sur le site de Sun (www.sun.com). La version actuelle est 4.1. Il y a une version 5.0 en Bêta. Vérifier qu’il est bien installé sur votre poste en l’exécutant.

TD Java - Oracle 03/01/2006

2/17

Présentation succincte de l’interface :

Editeur de code Console de sortie

Exploration de la

classe en cours

Exploration de vos

projets JAVA

Naviguer dans les

classes ouvertes

Exécuter

TD Java - Oracle 03/01/2006

3/17

Créer votre premier projet JAVA avec NETBEANS.

Lancer Netbeans pour arriver à l’écran suivant :

En cliquant sur New Project, vous pouvez créer votre nouveau projet. Cette fenêtre apparaît.

Génération

automatique de la

classe Main

Nom du projet

Projet par défaut

TD Java - Oracle 03/01/2006

4/17

Une fois vos paramètres sont saisis, vous arrivez à cet écran :

Mon premier programme JAVA

Nous sommes maintenant prêts à écrire notre premier programme Java. Structure globale

Un programme Java est constitué de : – l’importation des packages; Cette partie doit contenir l’ensemble des bibliothèques

de classes, c’est à dire l’ensemble des fonctionnalités, que l’on souhaite utiliser dans le cadre de notre programme.

– la définition de la classe comportant le programme; Cette partie permet de déclarer la classe d’exécution, c’est à dire le contexte d’exécution de notre programme.

– la définition de la procédure qui sera exécutée : la procédure main. Cette partie est le point d’entrée de notre programme : la zone à exécuter.

L’exemple suivant nous montre la structure générale d’un programme JAVA.

/ / Commentaire Java

import java.lang.* ; / / importation des packages

public class Prg { / / classe du programme

TD Java - Oracle 03/01/2006

5/17

public static void main ( String arg [ ] ) { / / procédure principale

instruction ( s ); }

}

Le fichier portant un programme java possède obligatoirement l’extension « .java ».De plus, ce fichier porte obligatoirement le nom de la classe principale du programme. Dans l’exemple précédent, le fichier portant ce programme est le fichier « Prg.java »

Pour pouvoir écrire notre premier programme Java, nous avons besoin d’afficher.

Cela se fait en utilisant l’instruction : System.out.println (…) ;

Le paramètre de cette instruction est une chaîne de caractères. L’utilisation de cette

instruction est donc de la forme : System.out.println ("Java est super") ; On peut remarquer qu’une instruction est obligatoirement suivie d’un point virgule.

EXERCICE 1 :

Créer un programme qui affiche « Hello World ».

Créer votre première classe java avec « NETBEANS ».

En faisant un clic droit sur la section « navigation projet » et après avoir choisi le menu

« New � Java Class ».

TD Java - Oracle 03/01/2006

6/17

Vous arrivez à cet écran.

Que remarquez vous dans la console ? A l’aide du navigateur aller dans le répertoire /bin que remarquez vous ?

Localisation des

sources

Nom de la classe

TD Java - Oracle 03/01/2006

7/17

Connexion à une base de données ORACLE avec JDBC.

Oracle dans sa version 8 (8.0.4 et plus) met à disposition deux drivers JDBC :

Le driver JDBC OCI : fournit une implémentation des interfaces JDBC en utilisant OCI (Oracle Call Interface) pour interagir avec une base de données Oracle. Parce qu'il utilise des méthodes natives, il est spécifique à une plate-forme. Les plates-formes supportées sont Solaris (2.5 et plus), Win95 et WinNT (3.51 et plus). Ce driver requière l'installation d'un client Net8 sur le poste client.

Le driver JDBC Thin : utilise directement les sockets Java pour se connecter directement à la base. Il fournit sa propre implémentation de Net8 en TCP/IP. Le driver est entièrement écrit en Java, c'est pour cette raison qu'il est complètement indépendant de la plate-forme. Le driver Thin ne requière pas de logiciel côté client, à l'inverse de l'OCI. Il nécessite uniquement un listener TCP/IP côté serveur. L'avantage du driver Thin est qu'on peut écrire des applets qui sont téléchargeables dans un navigateur, vu qu'il ne nécessite aucune appli côté client. Par contre le driver OCI, lui, utilise des méthodes natives, qui font que les applets ne fonctionneront pas.

EXERCICE 2 :

Copier « classes12.zip » et « nls_charset12.zip » dans le répertoire /lib de votre projet. Ajouter ces bibliothèques dans les propriétés de votre projet.

Si vous utilisez NETBEANS 3.5, monter l’archive grâce au menu clic droit puis « mount file ». Si vous utilisez NETBEANS 4.x, cliquer sur le bouton droit sur « librairies » dans le panneau exploration projet puis « Add JAR/Folder »

Créer maintenant un programme qui se connecte à une base oracle et renvoie la liste

des tables d’un utilisateur. //Import des classes nécessaires import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;

TD Java - Oracle 03/01/2006

8/17

Connection conn; //déclaration d’une connexion Statement stmt; //déclaration d’un rapport ResultSet R; //déclaration d’un enregistrement //Enregistrement des drivers ORACLE. DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //Création d’une connexion à une base ORACLE conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = IP DE LA MACHINE OU SE SITUE LA BDD)(PORT = 1521)) )(CONNECT_DATA = (SERVICE_NAME = NOM DE LA BDD ORACLE) ) )", "LOGIN", "PASS"); stmt = conn.createStatement(); //Création de l’état R = stmt.executeQuery("select * from …."); //execution d’une requête //Lecture du Resultset while (R.next()) {

String s = R.getString("NOM DE LA COLONNE"); } Rappel : Pour récupérer les tables d’un utilisateur dans ORACLE : « Select TNAME from tab » Attention : la méthode « DriverManager.registerDriver » nécessite l’utilisation d’un bloc « try…catch.. ». EXERCICE 3 :

Créer une interface qui permet d’entrer un login et un mot de passé et d’afficher dans

la console la liste des tables de l’utilisateur connecté.

TD Java - Oracle 03/01/2006

9/17

INTERFACE AVEC NETBEANS – Création d’une « JFrame » Clic droit puis « New � JFrame »

Les composants Interface (JFrame : fenêtre et JPanel : panneau) possède un type de calque (« Layout ») afin de définir la position des différents composants posés dessus. Dans le but de simplifier le positionnement de nos composants choisir le Layout de type « AbsoluteLayout ». Choisir les composants « JTextField », « JLabel » et « JButton »

Propriétés du

composant

Liste des

composants

graphiques Formulaire

en création

Liste des

composants du

formulaire

TD Java - Oracle 03/01/2006

10/17

EXERCICE 4 :

Compléter votre programme en ajoutant un bouton « choix » dit bouton combo qui

recevra la liste des tables de l’utilisateur connecté.

Aide : Utiliser le type « ArrayList » //Import des classes nécessaires import java.util.ArrayList; import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; //Déclaration ArrayList tabStr = new ArrayList(); //ajouter une ligne dans l’ArrayList tabStr.add(« chaine »); //pour changer l’ArrayList en tableau. tabStr.toArray(); Le remplissage d’un bouton combo passe par 2 étapes. //1 – Création d’un Model mémoire pour le bouton combo qui contiendra les données ComboBoxModel jComboBox2Model = new DefaultComboBoxModel(…); //2- Affecter au bouton le model jComboBox1.setModel(jComboBox2Model);

TD Java - Oracle 03/01/2006

11/17

EXERCICE 5 :

Compléter votre programme en ajoutant un tableau à deux colonnes qui prendra en valeur la liste des colonnes et leur type de la table sélectionnée dans le bouton choix qui lui contient maintenant la liste des tables.

Requête qui permet de récupérer les colonnes d’une table ORACLE : Select COLUMN_NAME,DATA_TYPE from USER_TAB_COLUMNS WHERE TABLE_NAME = ‘NOM DE LA TABLE’ //Import des classes nécessaires import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; //déclaration d’un tableau de string : String[ ] monTab = new String [ ]; //Pour afficher des lignes dans un tableau appelé jTable, on doit passer par un model. DefaultTableModel model = new DefaultTableModel(null, “ENTETE DU TABLEAU”); jTable1.setModel(model); //affectation du model au tableau model.addRow(…); //si on veut ajouter une ligne au tableau.

TD Java - Oracle 03/01/2006

12/17

EXERCICE 6 :

Utiliser le script SQL ORACLE donné en ANNEXE pour créer le MCD suivant :

1,1

1,1

0,n

ENSEIGNANT

NumeroInsee

NomEnseignant

PrenomEnseignant

DateEmbauche

DernierDiplome

Email

Ville

Statut

0,n

0,n

ORDINATEUR

RefOrdi

NomOrdi

ProcOrdi

VitesseOrdi

DateMiseEnServiceOrdi

DateCmdOrdi

Constructeur

1,n

DEPARTEMENT

NomDept

DateCreation

Localisation

Telephone

0,n

QUALIFICATION

CodeQualif

LibQualif

0,n

LOGICIEL

NomLogiciel

Description

Possede

Rattacher

Utilise

DureeMoyenne

Installation

DateInstall

NumLicense

Utiliser les acquis et les interfaces que vous venez de créer pour faire un programme qui prend en entrée un nom de logiciel et une description, et qui l’insère dans la base puis affiche dans un tableau la liste de logiciels de la base.

Pour les requêtes qui créent des objets ou insèrent des lignes, on utilise l’instruction :

stmt.executeUpdate ("insert….") ; à la place de l’instruction « executeQuery ».

TD Java - Oracle 03/01/2006

13/17

EXERCICE 7 : Manipulation d’Images avec Oracle-InterMedia

L’objectif de cette partie du TD consiste à développer un outil souple de stockage et de recherche d’images dans une base de données oracle avec le langage JAVA. Avec les versions récentes d'Oracle, vous avez la possibilité de stocker et de manipuler des données multmédia dans la BDD. Pour cela, Oracle utilise un package spécial nommé Intermedia permettant le stockage, la manipulation et l’extraction des propriétés (couleur, texture, forme...) de et vers la base de données d’une manière souple et flexible. Afin de mieux comprendre les concepts requis, veuillez lire attentivement le document stocké dans le dossier partagé qui vous expliquera en particulier comment utiliser Intermedia avec Java. Créez maintenant une table Image avec la structure suivante :

Mes_Images (Id, nom_image, image_physique, signature)

L'identifier est un numérique, le nom-image est le nom de l'image sans l'extension (BascketBall.gif -> BascketBall), image_physique est l'image brute à stocker, la signature de l'image de type OrdSys.ordimagesignature contient les propriétés de l'image (pour plus de détails, référez vous au document technique si besoin ou sur Internet).

Stockage d’images

Dans cette étape, vous allez développer une interface permettant de stocker les images localisées sur le disque dur de l’utilisateur à l'intérieur de la tables Mes_Images en utilisant une boite de dialogue. Après avoir stocké l’image, le système affichera un message de validation et l’image sera aperçue dans la fenêtre principale. Voici à quoi ressemblera votre interface :

Le code d’affichage d'une boite de dialogue en Java est le suivant :

TD Java - Oracle 03/01/2006

14/17

String chemin_image;

JFileChooser chooser = new JFileChooser(); //création de la boite de dialogue

chooser.setFileFilter(new JavaFilter()); // ajout d'un filtre qui permet l’affichage des //images

dans la boite de dialogue

int option = chooser.showDialog(null," Selectionner Image .. "); //affiche la boite //de

dialogue

chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

if (option ==JFileChooser.APPROVE_OPTION)

{

chemin_image = chooser.getSelectedFile().getAbsolutePath(); //si une image est //sélectionnée ,

récupérez le fichier puis son chemin et affichez la dans l’espace vide //au dessus

}

Le code de la classe JavaFilter est le suivant :

class JavaFilter extends javax.swing.filechooser.FileFilter

{

public boolean accept (File f) {

return f.getName ().toLowerCase ().endsWith (".jpg")

|| f.isDirectory ();

}

public String getDescription () {

return "Images (*.jpg)";

}

}

Pour afficher l’image dans la fenêtre principale, utilisez la classe ImageIcon et associez la à un objet de type JLabel avec la méthode setIcon.

Recherche d’images par le contenu

Dans cette étape, vous allez établir un moteur de recherche d’images qui prend en considération le contenu de l’image. En effet, l’utilisateur fournit à l’application à travers une boite de dialogue une image quelconque récupérée de son disque dur. Ensuite, le système appliquera la méthode OrdImageSignature.evaluateScore() qui prend 3 paramètres : les 2 signatures à comparer et les paramètres de comparaison (voir document technique) afin de rechercher l’image la plus similaire. Après avoir trouvé l’image en question, l’application l’affichera dans la fenêtre principale.

TD Java - Oracle 03/01/2006

15/17

ANNEXE

SCRIPT SQL ORACLE -- -----------------------------------------------------------------------------

-- Génération d'une base de données pour

-- Oracle Version 9i

-- (7/12/2005 9:06:54)

-- -----------------------------------------------------------------------------

-- Auteur : BARTH Florent

-- -----------------------------------------------------------------------------

-- -----------------------------------------------------------------------------

-- TABLE : DEPARTEMENT

-- -----------------------------------------------------------------------------

CREATE TABLE DEPARTEMENT

(

NOMDEPT VARCHAR2(128) NOT NULL,

DATECREATION DATE NULL,

LOCALISATION VARCHAR2(128) NULL,

TELEPHONE VARCHAR2(15) NULL

, CONSTRAINT PK_DEPARTEMENT PRIMARY KEY (NOMDEPT)

) ;

-- -----------------------------------------------------------------------------

-- TABLE : LOGICIEL

-- -----------------------------------------------------------------------------

CREATE TABLE LOGICIEL

(

NOMLOGICIEL VARCHAR2(128) NOT NULL,

DESCRIPTION VARCHAR2(128) NULL

, CONSTRAINT PK_LOGICIEL PRIMARY KEY (NOMLOGICIEL)

) ;

-- -----------------------------------------------------------------------------

-- TABLE : ORDINATEUR

-- -----------------------------------------------------------------------------

CREATE TABLE ORDINATEUR

(

REFORDI VARCHAR2(128) NOT NULL,

NOMORDI VARCHAR2(128) NULL,

PROCORDI VARCHAR2(128) NULL,

VITESSEORDI VARCHAR2(128) NULL,

DATEMISEENSERVICEORDI DATE NULL,

DATECMDORDI DATE NULL,

CONSTRUCTEUR VARCHAR2(128) NULL

, CONSTRAINT PK_ORDINATEUR PRIMARY KEY (REFORDI)

) ;

-- -----------------------------------------------------------------------------

-- TABLE : QUALIFICATION

-- -----------------------------------------------------------------------------

CREATE TABLE QUALIFICATION

(

CODEQUALIF VARCHAR2(3) NOT NULL,

LIBQUALIF VARCHAR2(128) NULL

, CONSTRAINT PK_QUALIFICATION PRIMARY KEY (CODEQUALIF)

) ;

TD Java - Oracle 03/01/2006

16/17

-- -----------------------------------------------------------------------------

-- TABLE : ENSEIGNANT

-- -----------------------------------------------------------------------------

CREATE TABLE ENSEIGNANT

(

NUMEROINSEE VARCHAR2(30) NOT NULL,

NOMDEPT VARCHAR2(128) NOT NULL,

CODEQUALIF VARCHAR2(3) NOT NULL,

NOMENSEIGNANT VARCHAR2(50) NOT NULL,

PRENOMENSEIGNANT VARCHAR2(40) NULL,

DATEEMBAUCHE DATE NULL,

DERNIERDIPLOME VARCHAR2(255) NULL,

EMAIL VARCHAR2(128) NULL,

VILLE VARCHAR2(128) NULL,

STATUT VARCHAR2(128) NULL

, CONSTRAINT PK_ENSEIGNANT PRIMARY KEY (NUMEROINSEE)

) ;

-- -----------------------------------------------------------------------------

-- INDEX DE LA TABLE ENSEIGNANT

-- -----------------------------------------------------------------------------

CREATE INDEX I_FK_ENSEIGNANT_DEPARTEMENT

ON ENSEIGNANT (NOMDEPT ASC)

;

CREATE INDEX I_FK_ENSEIGNANT_QUALIFICATION

ON ENSEIGNANT (CODEQUALIF ASC)

;

-- -----------------------------------------------------------------------------

-- TABLE : UTILISE

-- -----------------------------------------------------------------------------

CREATE TABLE UTILISE

(

NUMEROINSEE VARCHAR2(30) NOT NULL,

REFORDI VARCHAR2(128) NOT NULL,

DUREEMOYENNE NUMBER(4) NULL

, CONSTRAINT PK_UTILISE PRIMARY KEY (NUMEROINSEE, REFORDI)

) ;

-- -----------------------------------------------------------------------------

-- INDEX DE LA TABLE UTILISE

-- -----------------------------------------------------------------------------

CREATE INDEX I_FK_UTILISE_ENSEIGNANT

ON UTILISE (NUMEROINSEE ASC)

;

CREATE INDEX I_FK_UTILISE_ORDINATEUR

ON UTILISE (REFORDI ASC)

;

-- -----------------------------------------------------------------------------

-- TABLE : INSTALLATION

-- -----------------------------------------------------------------------------

CREATE TABLE INSTALLATION

(

REFORDI VARCHAR2(128) NOT NULL,

NOMLOGICIEL VARCHAR2(128) NOT NULL,

DATEINSTALL DATE NULL,

NUMLICENSE VARCHAR2(128) NULL

, CONSTRAINT PK_INSTALLATION PRIMARY KEY (REFORDI, NOMLOGICIEL)

) ;

TD Java - Oracle 03/01/2006

17/17

-- -----------------------------------------------------------------------------

-- INDEX DE LA TABLE INSTALLATION

-- -----------------------------------------------------------------------------

CREATE INDEX I_FK_INSTALLATION_ORDINATEUR

ON INSTALLATION (REFORDI ASC)

;

CREATE INDEX I_FK_INSTALLATION_LOGICIEL

ON INSTALLATION (NOMLOGICIEL ASC)

;

-- -----------------------------------------------------------------------------

-- CREATION DES REFERENCES DE TABLE

-- -----------------------------------------------------------------------------

ALTER TABLE ENSEIGNANT ADD (

CONSTRAINT FK_ENSEIGNANT_DEPARTEMENT

FOREIGN KEY (NOMDEPT)

REFERENCES DEPARTEMENT (NOMDEPT)) ;

ALTER TABLE ENSEIGNANT ADD (

CONSTRAINT FK_ENSEIGNANT_QUALIFICATION

FOREIGN KEY (CODEQUALIF)

REFERENCES QUALIFICATION (CODEQUALIF)) ;

ALTER TABLE UTILISE ADD (

CONSTRAINT FK_UTILISE_ENSEIGNANT

FOREIGN KEY (NUMEROINSEE)

REFERENCES ENSEIGNANT (NUMEROINSEE)) ;

ALTER TABLE UTILISE ADD (

CONSTRAINT FK_UTILISE_ORDINATEUR

FOREIGN KEY (REFORDI)

REFERENCES ORDINATEUR (REFORDI)) ;

ALTER TABLE INSTALLATION ADD (

CONSTRAINT FK_INSTALLATION_ORDINATEUR

FOREIGN KEY (REFORDI)

REFERENCES ORDINATEUR (REFORDI)) ;

ALTER TABLE INSTALLATION ADD (

CONSTRAINT FK_INSTALLATION_LOGICIEL

FOREIGN KEY (NOMLOGICIEL)

REFERENCES LOGICIEL (NOMLOGICIEL)) ;

-- -----------------------------------------------------------------------------

-- FIN DE GENERATION

-- -----------------------------------------------------------------------------