/*
 * Exemple simple d'accès à une base de données Oracle
 *
 * On utilise le driver THIN d'Oracle.
 */

import java.sql.*;
import java.util.*;
import java.text.*; // pour formater la date

public class Employe
{
  public static void main(String[] args)
       throws SQLException, ClassNotFoundException
  {
    // Charge le driver
    Class.forName ("oracle.jdbc.driver.OracleDriver");
    // Un exemple à ne pas suivre : mettre le mot de passe en dur
    Connection conn =
      DriverManager.getConnection ("jdbc:oracle:thin:@erato:1521:MINFO",
				   "toto", "XXXXXX");
    Statement stmt = conn.createStatement ();
    ResultSet rset = stmt.executeQuery ("SELECT nome, datemb FROM emp "
					+ "ORDER BY nome");
    
    // Juste pour tester un bug du driver Oracle : le nom de la table est vide
    System.out.println("Nom de la table : " + rset.getMetaData().getTableName(1));
    System.out.println("Type de la colonne  : " + rset.getMetaData().getColumnType(1));
    System.out.println("Nom de la colonne : " + rset.getMetaData().getColumnName(1));

    // Récupère les données
    while (rset.next()) {
      System.out.print(rset.getString(1));
      java.sql.Date datemb = rset.getDate(2);
      if (! rset.wasNull()) {
	// Un peu d'exercice sur les dates en français ne fait pas de mal...
        String datembF = 
	  DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.FRANCE).format(datemb);
	SimpleDateFormat formateur =
	  (SimpleDateFormat)DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.FRANCE);
	formateur.applyPattern("MMMM"); // configure le formateur pour avoir
	                                // le mois en lettres (avec plus de
	                                // 3 lettres (car plus de 3 M)
	String mois = formateur.format(datemb);
	System.out.println(" embauché le : " + datembF);
	System.out.println("Au mois de " + mois);
      }
      else
	System.out.println();
    }

    // Modification d'une date d'embauche pour tester la syntaxe spéciale
    int nbLignesModifiees = stmt.executeUpdate ("UPDATE emp "
					 + "SET datemb = {d '1998-01-22'}"
					 + "WHERE nome = 'VILLARD'");
    System.out.println(nbLignesModifiees + " lignes modifiees");
    rset = stmt.executeQuery ("SELECT nome, datemb FROM emp "
					+ "WHERE nome = 'VILLARD'"
					+ "ORDER BY nome");
    rset.next();
    System.out.println("Villard a ete embauche le "
		       + rset.getDate(2));
  }
}
