//-----------------------------------------------------------------------------
// CorrTD5b.java
// le 30 mars 2020
// compile et tourne sur corr_pl_curseurs.sql
//-----------------------------------------------------------------------------

import java.io.*;
import java.sql.*;

class CorrTD5b {

    //-------------------------------------------------------------------------
    static void creerVillageRepetition(Connection c) 
	throws SQLException {
        String texte = 
            "insert into village values(seq_village.nextval,?,?,?,?)";
        System.out.println(texte);
	PreparedStatement p = c.prepareStatement(texte);
	do {
	    p.setString(1, lireClavier("entrez ville : "));
	    p.setString(2, lireClavier("entrez activite : "));
	    p.setInt(3, Integer.parseInt(lireClavier("entrez prix : ")));
	    p.setInt(4, Integer.parseInt(lireClavier("entrez capacite : ")));
	    p.executeUpdate();
	} while (Integer.parseInt(lireClavier("on continue (1/0) ? "))==1);
	p.close();
    }
    
    //-------------------------------------------------------------------------
    static void creerVillageProcRepetition(Connection c) 
	throws SQLException {
        String texte = "{ call creerVillage(?,?,?,?) }";
        System.out.println(texte);
	CallableStatement p = c.prepareCall(texte);
	do {
	    p.setString(1, lireClavier("entrez ville : "));
	    p.setString(2, lireClavier("entrez activite : "));
	    p.setInt(3, Integer.parseInt(lireClavier("entrez prix : ")));
	    p.setInt(4, Integer.parseInt(lireClavier("entrez capacite : ")));
	    p.executeUpdate();
	} while (Integer.parseInt(lireClavier("on continue (1/0) ? "))==1);
	p.close();
    }

    //-------------------------------------------------------------------------
    static void traitement3FunRepetition(Connection c) 
	throws SQLException {
    	String texte = "{ ? = call traitement3(?) }"; 
        System.out.println(texte);
	CallableStatement cs = c.prepareCall(texte);
	cs.registerOutParameter(1, Types.INTEGER);
	do {
	    cs.setInt(2, Integer.parseInt(lireClavier("entrez jour : ")));
	    cs.execute();
	    System.out.println(cs.getInt(1)+" sejours detruits");
	} while (Integer.parseInt(lireClavier("on continue (1/0) ? "))==1);
	cs.close();
    }
    
    //-------------------------------------------------------------------------
    static void consulterClientRepetition(Connection c) 
	throws SQLException {
	System.out.println("ici consulterVillagesClientRepetition");

        String texte =
	    "select village.idv, ville, activite,prix, capacite\n"
	    +"from village, sejour\n"
	    +"where village.idv = sejour.idv and idc = ?";
        System.out.println(texte);
	PreparedStatement stmt = c.prepareStatement(texte);

	while (Integer.parseInt(lireClavier("on continue (1/0) ? "))==1) {
	    int ic = Integer.parseInt(lireClavier("identifiant client ? "));
	    stmt.setInt(1, ic);
	    ResultSet r = stmt.executeQuery();
	    while (r.next())
		System.out.println(r.getInt(1)+", "+r.getString(2)+", "
				   +r.getString(3)+", "+r.getInt(4)+", "
				   +r.getInt(5));
	    r.close();
	}
	stmt.close();
    }

    //-------------------------------------------------------------------------
    static String lireClavier(String message) {
	try {
            System.out.print(message);
	    BufferedReader clavier =
		new BufferedReader(new InputStreamReader(System.in));
	    return clavier.readLine();
	} catch (Exception e) {
	    return "erreur dans fonction lireClavier";
	}
    }

    public static void main(String[] args)
        throws SQLException, ClassNotFoundException {
	
	Class.forName("oracle.jdbc.driver.OracleDriver");
	Connection c = DriverManager.getConnection(
           "jdbc:oracle:thin:c##ewaller_a/ewaller_a@tp-oracle:1522:dbinfo");

	while (true) {
	    System.out.println("-------------------------------");
	    System.out.println("Bienvenue dans le menu Menu");
	    System.out.println("1 : creerVillageRepetition");
	    System.out.println("2 : creerVillageProcRepetition");
	    System.out.println("3 : traitement3FunRepetition");
	    System.out.println("10 : consulterClientRepetition");
	    System.out.println("0 : terminer");
	    int n = Integer.parseInt(lireClavier("Entrez votre choix : "));
	    switch (n) {
	    case 1 : creerVillageRepetition(c); break;
	    case 2 : creerVillageProcRepetition(c); break;
	    case 3 : traitement3FunRepetition(c); break;
	    case 10 : consulterClientRepetition(c); break;
	    case 0 : c.close(); return;
	    }
	}
    }
}

//-----------------------------------------------------------------------------
