/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Database;
import Beans.BeanCmdTicket;
import Beans.BeanMovie;
import Beans.BeanProjections;
import Helpers.EasyFile;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.sql.*;
public class OracleAccess {
private Connection con = null;
private CallableStatement csmt;
private Statement smt;
public OracleAccess(String db){
String driver = null;
String host = null;
String port = null;
String user = null;
String pass = null;
String sid = null;
String url = null;
if(db.equals("CB")){
driver = EasyFile.getConfig("Configs", "oracle_driver");
host = EasyFile.getConfig("Configs", EasyFile.getConfig("Configs", "oracle_host_cb"));
port = EasyFile.getConfig("Configs", "oracle_port");
user = EasyFile.getConfig("Configs", EasyFile.getConfig("Configs", "oracle_user_cb"));
pass = EasyFile.getConfig("Configs", EasyFile.getConfig("Configs", "oracle_pass_cb"));
sid = EasyFile.getConfig("Configs", EasyFile.getConfig("Configs", "oracle_sid_cb"));
}else if(db.equals("CC1")){
driver = EasyFile.getConfig("Configs", "oracle_driver");
host = EasyFile.getConfig("Configs", EasyFile.getConfig("Configs", "oracle_host_cc1"));
port = EasyFile.getConfig("Configs", "oracle_port");
user = EasyFile.getConfig("Configs", EasyFile.getConfig("Configs", "oracle_user_cc1"));
pass = EasyFile.getConfig("Configs", EasyFile.getConfig("Configs", "oracle_pass_cc1"));
sid = EasyFile.getConfig("Configs", EasyFile.getConfig("Configs", "oracle_sid_cc1"));
}
url = "jdbc:oracle:thin:@" + host + ":" + port + ":" + sid;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, pass);
con.setAutoCommit(false);
} catch (Exception ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void disconnect(){
try {
con.close();
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void initCallProc(String namePackage, String nameProcedure, int nbParam){
String request = "{ call " + namePackage + "." + nameProcedure + "(";
for(int i=0; i<nbParam; i++){
request += (i<(nbParam-1) ? "?," : "?)}");
}
try {
csmt = con.prepareCall(request);
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void initCallFunc(String namePackage, String nameProcedure, int nbParam){
String request = "{ ? = call " + namePackage + "." + nameProcedure + "(";
for(int i=0; i<nbParam; i++){
request += (i<(nbParam-1) ? "?," : "?)}");
}
try {
csmt = con.prepareCall(request);
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
public String quotes(String message){
String temp = message;
temp = temp.replace("'", "''");
return temp;
}
private void finish(String type) {
try {
this.smt = this.con.createStatement();
this.smt.executeQuery(type);
this.smt.close();
} catch (Exception ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
public BeanProjections doGetAllProjection(String qte){
BeanProjections projections = null;
try {
csmt.registerOutParameter(1, Types.ARRAY, "PROJECTION_T");
csmt.setString(2, qte);
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
Array retour = null;
try {
csmt.executeUpdate();
finish("commit");
retour = csmt.getArray(1);
} catch (SQLException ex) {
finish("rollback");
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}finally{
try {
csmt.close();
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
try {
ResultSet rs = retour.getResultSet();
if(rs != null){
projections = new BeanProjections();
}
while(rs.next()){
oracle.sql.STRUCT value = (oracle.sql.STRUCT)rs.getObject(2);
Object[] attributes = value.getAttributes();
java.util.Date dateHeureProjection = new java.util.Date(((java.sql.Timestamp) attributes[0]).getTime());
int numeroSalle = ((java.math.BigDecimal)attributes[1]).intValue();
int idCopie = ((java.math.BigDecimal)attributes[2]).intValue();
int idMovie = ((java.math.BigDecimal)attributes[3]).intValue();
String nameMovie = attributes[4].toString();
int duree = ((java.math.BigDecimal)attributes[5]).intValue();
projections.addProjection(dateHeureProjection, numeroSalle, idCopie, idMovie, nameMovie, duree);
}
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
return projections;
}
public BeanMovie doGetDetail(int idMovie) {
BeanMovie beanMovie = null;
try {
csmt.registerOutParameter(1, Types.ARRAY, "DETAIL_T");
csmt.setInt(2, idMovie);
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
Array retour = null;
try {
csmt.executeUpdate();
finish("commit");
retour = csmt.getArray(1);
} catch (SQLException ex) {
finish("rollback");
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}finally{
try {
csmt.close();
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
try {
ResultSet rs = retour.getResultSet();
if(rs != null){
beanMovie = new BeanMovie();
}
while(rs.next()){
STRUCT value = (STRUCT)rs.getObject(2);
Object[] attributes = value.getAttributes();
String imdbid = null;
if(attributes[1] != null){
imdbid = attributes[1].toString();
}
String name = null;
if(attributes[2] != null){
name = attributes[2].toString();
}
String overview = null;
if(attributes[3] != null){
overview = attributes[3].toString();
}
float rating = ((java.math.BigDecimal)attributes[4]).floatValue();
java.util.Date released = new java.util.Date(((java.sql.Timestamp) attributes[5]).getTime());
String trailer = null;
if(attributes[6] != null){
trailer = attributes[6].toString();
}
int translated = ((java.math.BigDecimal)attributes[7]).intValue();
int votes = ((java.math.BigDecimal)attributes[8]).intValue();
Blob affiche = (Blob)attributes[9];
java.sql.Array listActors = (java.sql.Array) attributes[10];
ResultSet resultSetActors = listActors.getResultSet();
LinkedList<String> listeActeurs = new LinkedList<String>();
while(resultSetActors.next()){
String valueResult = resultSetActors.getString(2);
listeActeurs.add(valueResult);
}
java.sql.Array listDirectors = (java.sql.Array) attributes[11];
ResultSet resultSetDirectors = listDirectors.getResultSet();
LinkedList<String> listeRealisateurs = new LinkedList<String>();
while(resultSetDirectors.next()){
String valueResult = resultSetDirectors.getString(2);
listeRealisateurs.add(valueResult);
}
java.sql.Array listStudios = (java.sql.Array) attributes[12];
ResultSet resultSetStudios = listStudios.getResultSet();
LinkedList<String> listeStudios = new LinkedList<String>();
while(resultSetStudios.next()){
String valueResult = resultSetStudios.getString(2);
listeStudios.add(valueResult);
}
java.sql.Array listLangues = (java.sql.Array) attributes[13];
ResultSet resultSetLangues = listLangues.getResultSet();
LinkedList<String> listeLangues = new LinkedList<String>();
while(resultSetLangues.next()){
String valueResult = resultSetLangues.getString(2);
listeLangues.add(valueResult);
}
java.sql.Array listGenres = (java.sql.Array) attributes[14];
ResultSet resultSetGenres = listGenres.getResultSet();
LinkedList<String> listeGenres = new LinkedList<String>();
while(resultSetGenres.next()){
String valueResult = resultSetGenres.getString(2);
listeGenres.add(valueResult);
}
java.sql.Array listCertifications = (java.sql.Array) attributes[15];
ResultSet resultSetCertifications = listCertifications.getResultSet();
LinkedList<String> listeCertifications = new LinkedList<String>();
while(resultSetCertifications.next()){
String valueResult = resultSetCertifications.getString(2);
listeCertifications.add(valueResult);
}
java.sql.Array listCopies = (java.sql.Array) attributes[16];
ResultSet resultSetCopies = listCopies.getResultSet();
LinkedList<Integer> listeCopies = new LinkedList<Integer>();
while(resultSetCopies.next()){
int valueResult = Integer.parseInt(resultSetCopies.getString(2));
listeCopies.add(valueResult);
}
java.sql.Array listProjections = (java.sql.Array) attributes[17];
ResultSet resultSetProjections = listProjections.getResultSet();
LinkedList<String> listeProjections = new LinkedList<String>();
while(resultSetProjections.next()){
String valueResult = resultSetProjections.getString(2);
listeProjections.add(valueResult);
}
int runtime = ((java.math.BigDecimal)attributes[18]).intValue();
beanMovie.setActeurs(listeActeurs);
beanMovie.setAffiche(affiche);
beanMovie.setCertifications(listeCertifications);
beanMovie.setCopies(listeCopies);
beanMovie.setDateSortie(released);
beanMovie.setGenres(listeGenres);
beanMovie.setIdMovie(idMovie);
beanMovie.setImdbId(imdbid);
beanMovie.setLangues(listeLangues);
beanMovie.setName(name);
beanMovie.setProjections(listeProjections);
beanMovie.setRating(rating);
beanMovie.setRealisateurs(listeRealisateurs);
beanMovie.setResume(overview);
beanMovie.setStudios(listeStudios);
if(translated == 1){
beanMovie.setTraduit(true);
}else{
beanMovie.setTraduit(false);
}
beanMovie.setTrailer(trailer);
beanMovie.setVotes(votes);
beanMovie.setRuntime(runtime);
}
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
return beanMovie;
}
public BeanCmdTicket doGetCmdDetails(String dateProjection, int idMovie) {
BeanCmdTicket beanCmdTicket = null;
try {
csmt.registerOutParameter(1, Types.ARRAY, "CMD_T");
csmt.setString(2, dateProjection);
csmt.setInt(3, idMovie);
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
Array retour = null;
try {
csmt.executeUpdate();
finish("commit");
retour = csmt.getArray(1);
} catch (SQLException ex) {
finish("rollback");
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}finally{
try {
csmt.close();
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
try {
ResultSet rs = retour.getResultSet();
if(rs != null){
beanCmdTicket = new BeanCmdTicket();
}
while(rs.next()){
STRUCT value = (STRUCT)rs.getObject(2);
Object[] attributes = value.getAttributes();
int idCopie = ((java.math.BigDecimal)attributes[0]).intValue();
int numeroSalle = ((java.math.BigDecimal)attributes[1]).intValue();
int nbPlacesDispo = ((java.math.BigDecimal)attributes[2]).intValue();
beanCmdTicket.setIdCopie(idCopie);
beanCmdTicket.setNbPlacesDispo(nbPlacesDispo);
beanCmdTicket.setNumeroSalle(numeroSalle);
beanCmdTicket.setIdMovie(idMovie);
java.util.Date date = null;
try {
date = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(dateProjection);
} catch (ParseException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
String test = new SimpleDateFormat("dd/MM/yyyy HH:mm").format(date);
beanCmdTicket.setDate(date);
}
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
return beanCmdTicket;
}
public String doAcheterTicket(String date, int numeroSalle, int nbTicket) {
String messageErreur = null;
try {
csmt.setString(1, date);
csmt.setInt(2, numeroSalle);
csmt.setInt(3, nbTicket);
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
try {
csmt.executeUpdate();
finish("commit");
} catch (SQLException ex) {
finish("rollback");
if(ex.getErrorCode() == 20006){
messageErreur = "Il n'y a pas assez de places dans la salle.";
}else if(ex.getErrorCode() == 20005){
messageErreur = "La salle est complète.";
}else{
messageErreur = ex.getMessage();
}
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}finally{
try {
csmt.close();
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
return messageErreur;
}
public boolean doInsertProjection(int idCopie, java.util.Date date, int salle) {
boolean correct = false;
String dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm").format(date);
try {
csmt.setString(1, dateFormat);
csmt.setInt(2, salle);
csmt.setInt(3, idCopie);
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
try {
csmt.executeUpdate();
finish("commit");
correct = true;
} catch (SQLException ex) {
finish("rollback");
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}finally{
try {
csmt.close();
} catch (SQLException ex) {
Logger.getLogger(OracleAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
return correct;
}
}