diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml
index 20d6cbe..122a7bd 100644
--- a/.idea/dbnavigator.xml
+++ b/.idea/dbnavigator.xml
@@ -23,7 +23,11 @@
-
+
+
+
+
+
diff --git a/src/main/java/fr/myny/database/DataBase.java b/src/main/java/fr/myny/database/DataBase.java
index e801504..6a78cbd 100644
--- a/src/main/java/fr/myny/database/DataBase.java
+++ b/src/main/java/fr/myny/database/DataBase.java
@@ -22,162 +22,7 @@ public class DataBase {
}
- /**
- * La methode de remplissage de la base de donnees
- */
- public void fillDataBase(){
- /*String sql="INSERT INTO 'myny.Test_Table'" +
- " ('annee_numero_de_tirage', "+
- " 'jour_de_tirage', "+
- " 'date_de_tirage',"+
- " 'date_de_forclusion',"+
- " 'boule_1' ,"+
- " 'boule_2' ,"+
- " 'boule_3' ,"+
- " 'boule_4' ,"+
- " 'boule_5' ,"+
- " 'numero_chance' ,"+
- " 'combinaison_gagnante_en_ordre_croissant' ,"+
- " 'nombre_de_gagnant_au_rang1' ,"+
- " 'rapport_du_rang1' ,"+
- " 'nombre_de_gagnant_au_rang2' ,"+
- " 'rapport_du_rang2' ,"+
- " 'nombre_de_gagnant_au_rang3' ,"+
- " 'rapport_du_rang3' ,"+
- " 'nombre_de_gagnant_au_rang4' ,"+
- " 'rapport_du_rang4' ,"+
- " 'nombre_de_gagnant_au_rang5' ,"+
- " 'rapport_du_rang5' ,"+
- " 'nombre_de_gagnant_au_rang6' ,"+
- " 'rapport_du_rang6' ,"+
- " 'numero_jokerplus' ,"+
- " 'devise' ) VALUES";*/
- String sql="INSERT INTO myny.Test_Table" +
- " (annee_numero_de_tirage, "+
- " jour_de_tirage, "+
- " date_de_tirage,"+
- " date_de_forclusion,"+
- " boule_1 ,"+
- " boule_2 ,"+
- " boule_3 ,"+
- " boule_4 ,"+
- " boule_5 ,"+
- " numero_chance ,"+
- " combinaison_gagnante_en_ordre_croissant ,"+
- " nombre_de_gagnant_au_rang1 ,"+
- " rapport_du_rang1 ,"+
- " nombre_de_gagnant_au_rang2 ,"+
- " rapport_du_rang2 ,"+
- " nombre_de_gagnant_au_rang3 ,"+
- " rapport_du_rang3 ,"+
- " nombre_de_gagnant_au_rang4 ,"+
- " rapport_du_rang4 ,"+
- " nombre_de_gagnant_au_rang5 ,"+
- " rapport_du_rang5 ,"+
- " nombre_de_gagnant_au_rang6 ,"+
- " rapport_du_rang6 ,"+
- " numero_jokerplus ,"+
- " devise ) VALUES \n";
- try {
- Scanner sc = new Scanner(new File(filePath));
- sc.useDelimiter(";|\\n"); //sets the delimiter pattern
- int i=0,j;
- long val;
- String line=sc.nextLine();
- line="";
- String date, jour, mois, an;
- while (sc.hasNext()){
- j=(i% NBCOL)+1;
- if(j==1) {
- line=line+'(';
- val=Long.parseLong(sc.next().replace(",","."));
- line=line+val;
- line=line+';';
- }
- if(j< NBCOL && j>1) {
- if (j==2 ||j==11){
- line=line+"\'"+sc.next().replace(",",".")+"\',";
- }
- else if (j==3 ||j==4){
- date=sc.next().replace(",",".");
- jour=date.substring(0,2);
- mois=date.substring(3,5);
- an=date.substring(6,10);
- line=line+"\'"+an+"-"+mois+"-"+jour+"\',";
- }
- else{
- line=line+sc.next().replace(",",".");
- line=line+';';
- }
- }
- if(j== NBCOL) {
- line=line+"\'"+sc.next().replace(",",".")+"\'";
- line=line+')';
- line=line.replaceAll("\\s","");
- line = line.replaceAll(";", ",");
- if(sc.hasNext()) {
- line = line+ ",";
- }
- else{
- line = line+ ";";
- }
- //System.out.println(line);
- sql=sql+line;
- line="";
- }
- i++;
- //System.out.println(sc.nextLine());
- //System.out.print(sc.next()); //find and returns the next complete token from this scanner
- }
- System.out.println(sql);
- //System.out.println(sql);
- /*CSVReader reader = new CSVReader(new FileReader(filePath));
- String[] nextLine=reader.readNext();
- while ((nextLine = reader.readNext()) != null) {
- // nextLine[] is an array of values from the line
- for (int j = 0; j < nextLine.length - 1; j++) {
- if (j==0){
- sql=sql+"(";
- }
- sql=sql+nextLine[j];
- if (j==nextLine.length-1){
- sql=sql+"),";
- }
- else{
- sql=sql+",";
- }
- //System.out.println(nextLine[j]);
- }
- sql=sql+";";
- }
- System.out.println(sql);
-
- conn = DriverManager.getConnection(url);
- if(conn!=null) {
- Statement stmt = conn.createStatement();
- stmt.executeQuery(sql);
- conn.commit();
- System.out.println("statement cree");
- }*/
- }
- catch (Exception e){
- System.out.println(e.getMessage());
- }
- try {
- conn = this.getConnection();
- if(conn!=null) {
- Statement stmt = conn.createStatement();
- stmt.executeQuery(sql);
- conn.commit();
- //conn.close();
- System.out.println("statement cree");
- }
- } catch (SQLException e) {
- System.out.println("oskour");
- System.out.println(e.getMessage());
- }
- }
/**
* La methode dimport de donnees depuis la base de donnees
@@ -309,6 +154,133 @@ public class DataBase {
}
+ /**
+ * La methode de remplissage de la base de donnees
+ */
+ public void fillDataBase(){
+ int i=0,j, nbValAj=0;
+ long val;
+ String line="";
+ String date, jour, mois, an;
+ long[][] mesL=new long[4000][NBCOL+1];
+ String[][]mesS=new String[4000][NBCOL+1];
+ Double[][]mesD=new Double[4000][NBCOL+1];
+ String sql="INSERT INTO myny.Test_Table" +
+ " (annee_numero_de_tirage, "+
+ " jour_de_tirage, "+
+ " date_de_tirage,"+
+ " date_de_forclusion,"+
+ " boule_1 ,"+
+ " boule_2 ,"+
+ " boule_3 ,"+
+ " boule_4 ,"+
+ " boule_5 ,"+
+ " numero_chance ,"+
+ " combinaison_gagnante_en_ordre_croissant ,"+
+ " nombre_de_gagnant_au_rang1 ,"+
+ " rapport_du_rang1 ,"+
+ " nombre_de_gagnant_au_rang2 ,"+
+ " rapport_du_rang2 ,"+
+ " nombre_de_gagnant_au_rang3 ,"+
+ " rapport_du_rang3 ,"+
+ " nombre_de_gagnant_au_rang4 ,"+
+ " rapport_du_rang4 ,"+
+ " nombre_de_gagnant_au_rang5 ,"+
+ " rapport_du_rang5 ,"+
+ " nombre_de_gagnant_au_rang6 ,"+
+ " rapport_du_rang6 ,"+
+ " numero_jokerplus ,"+
+ " devise ) VALUES \n";
+ try {
+ Scanner sc = new Scanner(new File(filePath));
+ sc.useDelimiter(";|\\n"); //sets the delimiter pattern
+ line=sc.nextLine();
+ line="";
+ while (sc.hasNext()){
+ j=(i% NBCOL)+1;
+ if(j==1) {
+ line=line+"(?,";
+ mesL[nbValAj][j]=Long.parseLong(sc.next());
+ }
+ if(j< NBCOL && j>1) {
+ line = line + "?,";
+ if (j==2 ||j==11){
+ //line=line+"\'"+sc.next().replace(",",".")+"\',";
+ mesS[nbValAj][j] = sc.next().replaceAll("\\s", "");
+
+ }
+ else if (j==3 ||j==4){
+ date=sc.next().replace(",",".");
+ jour=date.substring(0,2);
+ mois=date.substring(3,5);
+ an=date.substring(6,10);
+ mesS[nbValAj][j]=an+"-"+mois+"-"+jour;
+ }
+ else if (j >= 13 && j <= 23 && j % 2 == 1) {//pour les col 3 et 4, il s'agit d'une date, on va donc passer dela forme jj-mm-aaaa a la forme aaaa-mm-jj
+ mesD[nbValAj][j] = Double.parseDouble(sc.next().replace(",", "."));
+
+ }
+ else {//pour les autres col, on va simplement les remplir
+ mesL[nbValAj][j] = Long.parseLong(sc.next().replaceAll("\\s", ""));
+ }
+ }
+ if(j== NBCOL) {
+ nbValAj++;
+ line=line+"?)";
+ mesS[nbValAj][j] = sc.next().replaceAll("\\s", "");
+ if(sc.hasNext()) {
+ line = line+ ",";
+ }
+ else{
+ line = line+ ";";
+ }
+ //System.out.println(line);
+ sql=sql+line;
+ line="";
+ }
+ i++;
+ }
+ System.out.println(sql);
+ }
+ catch (Exception e){
+ System.out.println(e.getMessage());
+ }
+ if (nbValAj>0) {//si on a des modifications
+ PreparedStatement ps = null;
+ try {
+ conn = this.getConnection();
+ if (conn != null) {
+ ps=conn.prepareStatement(sql);
+ for(int a=0;a1&&b<5)||b==11||b==25){
+ System.out.println("a: "+a+" et b: "+b);
+ ps.setString((a)*25+b, mesS[a][b]);
+
+ }
+ else if(b > 12 && b < 24 && b % 2 == 1){
+ System.out.println("a: "+a+" et b: "+b);
+ if (b == 13) {
+ System.out.println(mesD[a][b]);
+ }
+ ps.setString((a)*25+b, mesD[a][b]+"");
+ }
+ else{
+ System.out.println("a: "+a+" et b: "+b);
+ ps.setString((a)*25+b, mesL[a][b]+"");
+ }
+ }
+ }
+ ps.executeQuery();//puis on execute la requete
+ System.out.println("update validee");
+ }
+ } catch (SQLException e) {
+ System.out.println("oskour into update");
+ System.out.println(e.getMessage());
+ }
+ }
+ }
+
/**
* La methode de mise a jour de la base de donnees
* @return sql String, contenant la requete SQL
@@ -434,12 +406,39 @@ public class DataBase {
return sql;
}
-
+ /**
+ * La methode de mise a jour de la base de donnees 2 qui evite les injections sql
+ * @return sql String, contenant la requete SQL
+ * @var mesL tableau dans lequel seront stockés tous les long
+ * @var mesS tableau dans lequel seront stockés tous les String
+ * @var mesD tableau dans lequel seront stockés tous les Double
+ * @var sc Scanner, l objet qui servira a lire le fichier csv
+ * @var line String, ligne contenant l'ajout a effectuer
+ * @var i int, un compteur de valeurs lues,
+ * @var j int, qui suit i%NBCOL
+ * @var a int, un compteur de lignes modifiees
+ * @var b int, un compteur de champs modifiees
+ * @var nbValAj int qui augmente si on doit ajouter des lignes
+ * @var date String, la valeur de la date lue
+ * @var jour String, le jour lu
+ * @var mois String, le mois lu
+ * @var an String, l annee lue
+ * @var anEntre long, valeur lue pour l annee et le numero de tirage. sert a definir si la valeur est a ajouter dans la table
+ * @var ps PreparedStatement pour executer la requete sans injection sql
+ * @var stmt Statement pour executer la requete de depart
+ */
public String updateDataBasev2() throws FileNotFoundException {
//Ligne maL=new Ligne();
+ Statement stmt;
long[][] mesL=new long[4000][NBCOL+1];
String[][]mesS=new String[4000][NBCOL+1];
Double[][]mesD=new Double[4000][NBCOL+1];
+ Scanner sc;
+ ResultSet rs;
+ long anEntre;
+ int i,j, nbValAj=0;
+ String date, jour, mois, an;
+ String line="";
String sql="INSERT INTO myny.Test_Table" + //le debut de la requete, specifiant laction a effectuer, la table et la db
" (annee_numero_de_tirage, "+
" jour_de_tirage, "+
@@ -467,38 +466,29 @@ public class DataBase {
" numero_jokerplus ,"+
" devise ) VALUES \n";
try {
- conn = this.getConnection(); //initialisation de la connexion
- if(conn!=null) { //si la co est bonne
- Scanner sc = new Scanner(new File(filePath)); //lire le fichier donne
+ conn = this.getConnection(); //initialisation de la connexion
+ if(conn!=null) { //si la co est bonne
+ sc = new Scanner(new File(filePath)); //lire le fichier donne
sc.useDelimiter(";|\\n"); //les delimiteurs seront ; et \n
sc.nextLine(); //on ne conserve pas la premiere ligne, contenant les metadonnees
- long cpt=0;
- //Object[] champs;
- int i=0,j=0, nbValAj=0;
- String date, jour, mois, an;
- String line="";
- long anEntre=Long.parseLong(sc.next()); //lecture de l id en haut du tableau(donc le plus grand, cest ce qu on a constate en lisant le csv
- //System.out.println("numero en haut du fichier csv :"+anEntre);
- Statement stmt = conn.createStatement(); //recuperation du nb de lignes dans la table
- ResultSet rs = stmt.executeQuery("SELECT MAX(annee_numero_de_tirage) FROM myny.Test_Table;");
+ anEntre=Long.parseLong(sc.next()); //lecture de l id en haut du tableau(donc le plus grand, cest ce qu on a constate en lisant le csv
+ stmt = conn.createStatement(); //recuperation du nb de lignes dans la table
+ rs = stmt.executeQuery("SELECT MAX(annee_numero_de_tirage) FROM myny.Test_Table;");
rs.next();
long maxvaldb=rs.getLong(1);
- //System.out.println("numero max de la db :"+rs.getLong(1));
+ if (maxvaldb<0){
+ maxvaldb=0;
+ }
/*comme les nombres de la premiere col sont decroissants, le nb le plus grand est lu en premier,
on va donc lire les nombres jusqua arriver a la plus haute valeur entree dans la table. On ne
pourrait probablement pas utiliser cette methode pour remplir la table en entier*/
- while(anEntre>maxvaldb) {
+ while(anEntre>maxvaldb&&sc.hasNext()) {
nbValAj++;//des quon rentre dans la boucle, on sait qu'on va devoir mettre a jour la table car cette valeur est>0
for (i = 0; i < NBCOL; i++) {//on remplit la ligne en effectuant une lecture par col
-
j = (i % NBCOL) + 1;
if (j == 1) {
line = line + "(?,";//debut de la ligne a jouter
mesL[nbValAj][j]=anEntre;
- //champs[cpt++]=anEntre;
- //line = line + anEntre;
- //line = line + ';';//on met un point virgule mais on le remplacera plus tard
- //sc.next();
}
if (j < NBCOL && j > 1) {//pour chaque colonne, on va faire en sorte de mettre le champ dans la onne mise en fore pour qu'il soit accepté par la db
line = line + "?,";
@@ -531,53 +521,23 @@ public class DataBase {
sql = sql + line + "\n";//on ajoute la ligne a la requete
line = "";
}
-
-
- /*if (j == 2 || j == 11) {
- line = line + "\'" + sc.next().replace(",", ".") + "\',";
- } else if (j == 3 || j == 4) {//pour les col 3 et 4, il s'agit d'une date, on va donc passer dela forme jj-mm-aaaa a la forme aaaa-mm-jj
- date = sc.next().replace(",", ".");
- jour = date.substring(0, 2);
- mois = date.substring(3, 5);
- an = date.substring(6, 10);
- line = line + "\'" + an + "-" + mois + "-" + jour + "\',";
- } else {//pour les autres col, on va simplement les remplir
- line = line + sc.next().replace(",", ".");
- line = line + ';';
- }
- }*/
- /*if (j == NBCOL) {//pour la derniere col
- line = line + "\'" + sc.next().replace(",", ".") + "\'";
- line = line + ')';//on la remplit
- line = line.replaceAll("\\s", "");//on remplace les caracteres qui nous derangent
- line = line.replaceAll(";", ",");
- anEntre = Long.parseLong(sc.next());//on lit le prochain id de l'entree
- if (anEntre > maxvaldb) {//on defini si on doit encore ajouter des lignes a la requete
- line = line + ",";
- } else {//ou si on doit cloturer la requete
- line = line + ";";
- }
- //System.out.println(line);
- sql = sql + line + "\n";//on ajoute la ligne a la requete
- line = "";
- }*/
}
}
System.out.println(sql);
- if (nbValAj>0) {
+ if (nbValAj>0) {//si on a des modifications
PreparedStatement ps = null;
try {
conn = this.getConnection();
if (conn != null) {
ps=conn.prepareStatement(sql);
- for(int a=1;a<=nbValAj;a++){
- for(int b=1;b<=NBCOL;b++){
+ for(int a=1;a<=nbValAj;a++){//pour chaque case de chaque ligne ajoutée, on va ajouter la valeur
+ for(int b=1;b<=NBCOL;b++){//dans la declaration preparee, pour eviter les injections sql
if((b>1&&b<5)||b==11||b==25){
System.out.println("a: "+a+" et b: "+b);
ps.setString((a-1)*25+b, mesS[a][b]);
}
- else if(j > 12 && j < 24 && j % 2 == 1){
+ else if(b > 12 && b < 24 && b % 2 == 1){
System.out.println("a: "+a+" et b: "+b);
ps.setString((a-1)*25+b, mesD[a][b]+"");
}
@@ -587,32 +547,14 @@ public class DataBase {
}
}
}
- //conn.close();
- ps.executeQuery();
+ ps.executeQuery();//puis on execute la requete
System.out.println("update validee");
}
} catch (SQLException e) {
System.out.println("oskour into update");
System.out.println(e.getMessage());
}
-
}
- /*System.out.println(sql);
- if (nbValAj>0) {//on effectue la requete si on a des maj a faire
- try {
- conn = this.getConnection();
- if (conn != null) {
- stmt = conn.createStatement();
- stmt.executeQuery(sql);
- conn.commit();
- //conn.close();
- System.out.println("update validee");
- }
- } catch (SQLException e) {
- System.out.println("oskour into update");
- System.out.println(e.getMessage());
- }
- }*/
}
} catch (SQLException e) {
System.out.println("oskour update");
@@ -621,8 +563,8 @@ public class DataBase {
return sql;
}
- public void removeLines() throws FileNotFoundException{
- String sql="delete from myny.Test_Table where annee_numero_de_tirage >2017027";
+ public void removeLines(int i) throws FileNotFoundException{
+ String sql="delete from myny.Test_Table where annee_numero_de_tirage >"+i;
try {
conn = this.getConnection();
if(conn!=null) {
diff --git a/src/test/java/fr/myny/database/DataBaseTest.java b/src/test/java/fr/myny/database/DataBaseTest.java
index ff12f52..23d2d52 100644
--- a/src/test/java/fr/myny/database/DataBaseTest.java
+++ b/src/test/java/fr/myny/database/DataBaseTest.java
@@ -16,14 +16,14 @@ class DataBaseTest {
DataBase maDB=new DataBase();
Connection maCo=maDB.getConnection();
assertNotNull(maCo);
- //maDB.fillDataBase();
+ maDB.fillDataBase();
Statement stmt= maDB.conn.createStatement();
ResultSet rs=stmt.executeQuery("SELECT Count(*) From myny.Test_Table");
rs.next();
long nbcolret= rs.getLong(1);
//System.out.println("nb lignes (changer la ligne juste en dessous si on modifie le nb de lignes): "+rs.getInt("total"));
System.out.println("nb lignes (changer la ligne juste en dessous si on modifie le nb de lignes): "+rs.getLong(1));
- assertEquals(1317,rs.getLong(1));
+ assertEquals(1321,rs.getLong(1));
}
@Test
@@ -72,7 +72,7 @@ class DataBaseTest {
@Test
public void removeLines() throws FileNotFoundException{
DataBase maDB=new DataBase();
- maDB.removeLines();
+ maDB.removeLines(0);
}
@Test