Guest User

Untitled

a guest
Jan 21st, 2017
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.38 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.sql.*;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.Random;
  7. import java.util.Scanner;
  8.  
  9. public class TestDataGenerator {
  10.     private static String database = "jdbc:oracle:thin:@oracle-lab.cs.univie.ac.at:1521:lab";
  11.     private static String user = "a0848868";
  12.     private static String pass = "dbs123"; 
  13.    
  14.    
  15.     //Generiert ein zufaelliges Datum im SQL-Format
  16.     public static String getRandomSQLDate(){
  17.         Random rand = new Random();
  18.         return "to_date('"+(rand.nextInt(28)+1)+"."+(rand.nextInt(12)+1)+"."+(rand.nextInt(3)+14)+"','DD.MM.RR')";
  19.     }
  20.    
  21.     //Liest eine Datei und gibt eine zufaellige Zeile aus
  22.     public static String getRandomLineFromFile(File f){    
  23.         String randomString = null;
  24.         Random rand = new Random();
  25.         int n = 0;
  26.         try{
  27.             for(Scanner sc = new Scanner(f);sc.hasNext();){
  28.                 ++n;
  29.                 String line = sc.nextLine();
  30.                 if(rand.nextInt(n) == 0)
  31.                     randomString = line;        
  32.              }
  33.         }catch(FileNotFoundException e){
  34.             e.printStackTrace();
  35.         }
  36.         return randomString;      
  37.     }
  38.    
  39.     //Zaehlt eintraege einer Tabelle
  40.     public static int count(String table){
  41.         int count = 0;     
  42.         try{
  43.             Connection con = DriverManager.getConnection(database,user,pass);
  44.             Statement stmt = con.createStatement();
  45.             ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM " + table);     
  46.             if (rs.next()) {
  47.                 count = rs.getInt(1);
  48.             }      
  49.             rs.close();
  50.             stmt.close();
  51.             con.close();
  52.         }catch(SQLException e){
  53.             e.printStackTrace();
  54.         }
  55.         return count;
  56.     }
  57.    
  58.     //Rechnet max Wert einer Spalte einer Tabelle
  59.     public static int max(String column, String table){
  60.         int max = 0;       
  61.         try{
  62.             Connection con = DriverManager.getConnection(database,user,pass);
  63.             Statement stmt = con.createStatement();
  64.             ResultSet rs = stmt.executeQuery("SELECT MAX("+column+") FROM " + table);      
  65.             if (rs.next()) {
  66.                 max = rs.getInt(1);
  67.             }      
  68.             rs.close();
  69.             stmt.close();
  70.             con.close();
  71.         }catch(SQLException e){
  72.             e.printStackTrace();
  73.         }
  74.         return max;
  75.     }  
  76.    
  77.     //Fuegt n Spiele zufaellig generiert ein
  78.     public static void insertSpiel(int n){
  79.         File vereine = new File("vereine.txt");
  80.         Random rand = new Random();
  81.         int spielID = max("spielid","spiel");
  82.         //Getting number of games
  83.         System.out.println("Number of datasets before insert: " + count("spiel"));         
  84.  
  85.         //Inserting
  86.         try{
  87.             Connection con = DriverManager.getConnection(database,user,pass);
  88.             Statement stmt = con.createStatement();
  89.             for(int i=0;i<n;i++){  
  90.                 spielID+=1;
  91.                 String ergebnis = rand.nextInt(6)+":"+rand.nextInt(6);
  92.                 String gegner = getRandomLineFromFile(vereine);
  93.                 String spieldatum = getRandomSQLDate();
  94.                 String austragungsort = (rand.nextInt()<0) ? "H" : "A";
  95.                 String insertSql = "Insert into SPIEL (SPIELID,ERGEBNIS,GEGNER,SPIELDATUM,AUSTRAGUNGSORT) values ('"+spielID+"','"+ergebnis+"','"+gegner+"',"+spieldatum+",'"+austragungsort+"')";
  96.                 stmt.executeUpdate(insertSql);             
  97.             }                
  98.         }catch (SQLException e){
  99.                     e.printStackTrace();
  100.         }  
  101.         //Counting datasets after insert
  102.         System.out.println("Number of datasets before insert: " + count("spiel"));     
  103.     }
  104.    
  105.     //Fuegt 11 zufaellige Spieler pro Spiel ein
  106.     public static void insertSpielen(){
  107.         HashMap<Integer,String> spielerIDs = new HashMap<Integer,String> ();
  108.         ArrayList<Integer> spielIDs = new ArrayList<Integer>();
  109.         ArrayList<Integer> torwartIDs = new ArrayList<Integer>();
  110.         ArrayList<Integer> abwehrIDs = new ArrayList<Integer>();
  111.         ArrayList<Integer> mittelfeldIDs = new ArrayList<Integer>();
  112.         ArrayList<Integer> angriffIDs = new ArrayList<Integer>();
  113.         ArrayList<Integer> aufstellung = new ArrayList<Integer>();
  114.         Random rand = new Random();
  115.         System.out.println("Number of datasets before insert: " + count("spielen"));
  116.        
  117.         try{
  118.             Connection con = DriverManager.getConnection(database,user,pass);
  119.             Statement stmt = con.createStatement();
  120.             ResultSet rs = stmt.executeQuery("SELECT angestellterID,spielerposition FROM Spieler");
  121.             while(rs.next()){
  122.                 spielerIDs.put(rs.getInt(1),rs.getString(2));
  123.             }
  124.            
  125.             for(int y : spielerIDs.keySet()){
  126.                 if(spielerIDs.get(y).equals("Torwart")){
  127.                     torwartIDs.add(y);
  128.                 }else if(spielerIDs.get(y).equals("Abwehr")){
  129.                     abwehrIDs.add(y);
  130.                 }else if(spielerIDs.get(y).equals("Mittelfeld")){
  131.                     mittelfeldIDs.add(y);
  132.                 }else if(spielerIDs.get(y).equals("Angriff")){
  133.                     angriffIDs.add(y);
  134.                 }
  135.             }
  136.            
  137.             rs = stmt.executeQuery("SELECT spielID FROM Spiel");
  138.             while(rs.next()){
  139.                 spielIDs.add(rs.getInt(1));
  140.             }
  141.             rs.close();
  142.            
  143.             for(int x : spielIDs){
  144.                 aufstellung.add(torwartIDs.get((rand.nextInt(torwartIDs.size()))));
  145.                 while(aufstellung.size()<5){
  146.                     int abwehrID = abwehrIDs.get(rand.nextInt(abwehrIDs.size()));
  147.                     if(!aufstellung.contains(abwehrID)){
  148.                         aufstellung.add(abwehrID);
  149.                     }
  150.                 }
  151.                 while(aufstellung.size()<9){
  152.                     int mittelfeldID = mittelfeldIDs.get(rand.nextInt(mittelfeldIDs.size()));
  153.                     if(!aufstellung.contains(mittelfeldID)){
  154.                         aufstellung.add(mittelfeldID);
  155.                     }
  156.                 }
  157.                 while(aufstellung.size()<11){
  158.                     int angriffID = angriffIDs.get(rand.nextInt(angriffIDs.size()));
  159.                     if(!aufstellung.contains(angriffID)){
  160.                         aufstellung.add(angriffID);
  161.                     }
  162.                 }
  163.                 for(int y : aufstellung){
  164.                     String insertSql = "Insert into SPIELEN (SPIELID,ANGESTELLTERID) values ('"+x+"','"+y+"')";
  165.                     stmt.executeUpdate(insertSql);
  166.                 }
  167.                 aufstellung.clear();
  168.             }
  169.         }catch(SQLException e){
  170.             e.printStackTrace();
  171.         }
  172.         System.out.println("Number of datasets after insert: " + count("spielen"));
  173.     }
  174.    
  175.     //Fuegt n Zuschauer ein zufaellig auf vorhandene Spiele
  176.     public static void insertZuschauer(int n){
  177.         File vornamen = new File("vornamen.txt");
  178.         File nachnamen = new File("nachnamen.txt");
  179.         Random rand = new Random();
  180.        
  181.         //Counting datasets before insert
  182.         int zuschauer = max("zuschauernr","zuschauer");
  183.         System.out.println("Number of datasets before insert: " + count("zuschauer"));
  184.                                    
  185.         //Getting number of games
  186.         int games = count("spiel");
  187.         System.out.println("Number of games: " + games);   
  188.        
  189.         ArrayList<Integer>spielIDs = new ArrayList<Integer>();
  190.         try {
  191.             Connection con = DriverManager.getConnection(database,user,pass);
  192.             Statement stmt = con.createStatement();
  193.             ResultSet rs = stmt.executeQuery("SELECT spielID FROM Spiel");
  194.             while(rs.next()){
  195.                 spielIDs.add(rs.getInt(1));
  196.             }      
  197.             //Inserting
  198.             for(int i=0;i<n;i++){                
  199.                 zuschauer+=1;
  200.                 int spielID = spielIDs.get(rand.nextInt(games));
  201.                 String vorname = getRandomLineFromFile(vornamen);
  202.                 String nachname = getRandomLineFromFile(nachnamen);
  203.                 String insertSql = "Insert into ZUSCHAUER (ZUSCHAUERNR,SPIELID,VORNAME,NACHNAME) values ('"+zuschauer+"','"+spielID+"','"+vorname+"','"+nachname+"')";
  204.                 stmt.executeUpdate(insertSql);                               
  205.             }  
  206.         }catch(SQLException e){
  207.             e.printStackTrace();
  208.         }
  209.            
  210.         //Counting datasets after insert
  211.         zuschauer = count("zuschauer");
  212.         System.out.println("Number of datasets after insert: " + zuschauer);       
  213.     }
  214.    
  215.     //Erstellst n Trainings zufaellig
  216.     public static void insertTraining(int n){
  217.         Random rand = new Random();
  218.         int trainingsID = max("trainingsid","training");
  219.         //Getting number of trainings
  220.         System.out.println("Number of datasets before insert: " + count("training"));          
  221.  
  222.         try{
  223.             Connection con = DriverManager.getConnection(database,user,pass);
  224.             Statement stmt = con.createStatement();
  225.             //Inserting
  226.             for(int i=0;i<n;i++){  
  227.                 trainingsID += 1;
  228.                 int trainingsdauer = rand.nextInt(3)+1;
  229.                 String trainingsdatum = getRandomSQLDate();
  230.                 String[] trainingsarten = {"Lauftraining","Spieltraining","Schusstraining","Torwarttraining"};
  231.                 String trainingsart = trainingsarten[rand.nextInt(4)];
  232.                 String insertSql = "Insert into TRAINING (TRAININGSID,TRAININGSDAUER,TRAININGSDATUM,TRAININGSART) values ('"+trainingsID+"','"+trainingsdauer+"',"+trainingsdatum+",'"+trainingsart+"')";
  233.                 stmt.executeUpdate(insertSql);
  234.             }
  235.         }catch(SQLException e){
  236.             e.printStackTrace();
  237.         }
  238.            
  239.         //Counting datasets after insert
  240.         System.out.println("Number of datasets before insert: " + count("training"));  
  241.     }
  242.    
  243.     //Fuegt alle Kombinationen von Training, Trainer und Spieler ein
  244.     public static void insertVeranstalten(){
  245.         HashMap<Integer,String>  trainingsIDs = new HashMap<Integer,String> ();
  246.         HashMap<Integer,String>  spielerIDs = new HashMap<Integer,String> ();
  247.         HashMap<Integer,String>  trainerIDs = new HashMap<Integer,String> ();
  248.         System.out.println("Number of datasets before insert: " + count("veranstalten"));          
  249.         try{
  250.             Connection con = DriverManager.getConnection(database,user,pass);
  251.             Statement stmt = con.createStatement();
  252.             ResultSet rs = stmt.executeQuery("SELECT trainingsID,trainingsart FROM training");
  253.             while(rs.next()){
  254.                 trainingsIDs.put(rs.getInt(1),rs.getString(2));
  255.             }
  256.            
  257.             rs = stmt.executeQuery("SELECT angestellterID,spielerposition FROM Spieler");
  258.             while(rs.next()){
  259.                 spielerIDs.put(rs.getInt(1),rs.getString(2));
  260.             }
  261.            
  262.             rs = stmt.executeQuery("SELECT lizenznummer,trainerstelle FROM trainer");
  263.             while(rs.next()){
  264.                 trainerIDs.put(rs.getInt(1),rs.getString(2));
  265.             }
  266.             rs.close();
  267.  
  268.             for(int x : trainingsIDs.keySet()){
  269.                 if(trainingsIDs.get(x).equals("Torwarttraining")){
  270.                     for(int y : trainerIDs.keySet()){
  271.                         if(trainerIDs.get(y).equals("Torwarttrainer")){
  272.                             for(int z : spielerIDs.keySet()){
  273.                                 if(spielerIDs.get(z).equals("Torwart")){
  274.                                     String insertSql = "Insert into VERANSTALTEN (LIZENZNUMMER,ANGESTELLTERID,TRAININGSID) values ('"+y+"','"+z+"','"+x+"')";
  275.                                     stmt.executeUpdate(insertSql);
  276.                                 }
  277.                             }
  278.                         }
  279.                     }
  280.                 }else if(trainingsIDs.get(x).equals("Lauftraining")){
  281.                     for(int y : trainerIDs.keySet()){
  282.                         if(trainerIDs.get(y).equals("Co-Trainer")){
  283.                             for(int z : spielerIDs.keySet()){
  284.                                 String insertSql = "Insert into VERANSTALTEN (LIZENZNUMMER,ANGESTELLTERID,TRAININGSID) values ('"+y+"','"+z+"','"+x+"')";
  285.                                 stmt.executeUpdate(insertSql);                             
  286.                             }
  287.                         }
  288.                     }
  289.                 }else if(trainingsIDs.get(x).equals("Schusstraining")){
  290.                     for(int y : trainerIDs.keySet()){
  291.                         if(trainerIDs.get(y).equals("Co-Trainer")){
  292.                             for(int z : spielerIDs.keySet()){
  293.                                 if(!spielerIDs.get(z).equals("Torwart")){
  294.                                     String insertSql = "Insert into VERANSTALTEN (LIZENZNUMMER,ANGESTELLTERID,TRAININGSID) values ('"+y+"','"+z+"','"+x+"')";
  295.                                     stmt.executeUpdate(insertSql);
  296.                                 }
  297.                             }
  298.                         }
  299.                     }
  300.                 }else{
  301.                     for(int y : trainerIDs.keySet()){
  302.                         if(trainerIDs.get(y).equals("Cheftrainer")){
  303.                             for(int z : spielerIDs.keySet()){
  304.                                 String insertSql = "Insert into VERANSTALTEN (LIZENZNUMMER,ANGESTELLTERID,TRAININGSID) values ('"+y+"','"+z+"','"+x+"')";
  305.                                 stmt.executeUpdate(insertSql);
  306.                             }
  307.                         }
  308.                     }
  309.                 }
  310.             }
  311.             stmt.close();
  312.             con.close();
  313.         }catch(SQLException e){
  314.             e.printStackTrace();
  315.         }
  316.         System.out.println("Number of datasets after insert: " + count("veranstalten"));
  317.     }
  318.    
  319.     //Fuegt zufaellige betreuungs verhaeltnisse ein
  320.     public static void insertBetreuen(int n){
  321.         System.out.println("Number of datasets before insert: " + count("betreuen"));
  322.         ArrayList<Integer> betreuerIDs = new ArrayList<Integer>();
  323.         int anzahlBetreuer = count("betreuer");
  324.         ArrayList<Integer> spielerIDs = new ArrayList<Integer>();
  325.         int anzahlSpieler = count("spieler");
  326.         HashMap<Integer,ArrayList<Integer>> bereitsBetreut = new HashMap<Integer,ArrayList<Integer>>();
  327.         Random rand = new Random();
  328.         int spielerID=0;
  329.         int betreuerID=0;
  330.         try {
  331.             Connection con = DriverManager.getConnection(database,user,pass);
  332.             Statement stmt = con.createStatement();
  333.             ResultSet rs = stmt.executeQuery("SELECT angestellterid FROM betreuer");
  334.             while(rs.next()){
  335.                 betreuerIDs.add(rs.getInt(1));
  336.             }
  337.             rs = stmt.executeQuery("SELECT angestellterid FROM spieler");
  338.             while(rs.next()){
  339.                 spielerIDs.add(rs.getInt(1));
  340.             }
  341.             rs = stmt.executeQuery("SELECT * FROM betreuen");
  342.             while(rs.next()){
  343.                 spielerID=rs.getInt(1);
  344.                 betreuerID=rs.getInt(2);
  345.                 if(bereitsBetreut.containsKey(spielerID)){
  346.                     bereitsBetreut.get(spielerID).add(betreuerID);
  347.                 }else{
  348.                     ArrayList<Integer> betreuerIDs2 = new ArrayList<Integer>();
  349.                     betreuerIDs2.add(betreuerID);
  350.                     bereitsBetreut.put(spielerID,betreuerIDs2);
  351.                 }
  352.             }          
  353.             rs.close();
  354.             for(int i=0;i<n;i++){
  355.                 while(true){
  356.                     spielerID = spielerIDs.get(rand.nextInt(anzahlSpieler));
  357.                     betreuerID = betreuerIDs.get(rand.nextInt(anzahlBetreuer));
  358.                     if(!bereitsBetreut.get(spielerID).contains(betreuerID))
  359.                         break;
  360.                 }  
  361.                 String insertSql = "Insert into BETREUEN(BETREUERID,SPIELERID) values ('"+betreuerID+"','"+spielerID+"')";
  362.                 stmt.executeUpdate(insertSql);                               
  363.             }
  364.             stmt.close();
  365.             con.close();
  366.         }catch(SQLException e){
  367.             e.printStackTrace();
  368.            
  369.         }
  370.         System.out.println("Number of datasets after insert: " + count("betreuen"));
  371.     }
  372.    
  373.     //http://stackoverflow.com/questions/5868369/how-to-read-a-large-text-file-line-by-line-using-java
  374.     //Fuegt Angestellter und alle anderen mit relativ begrenzten Eintraegen wie Betreuer, Spieler, Trainer, Titel and anfuehren
  375.     public static void insertBasics(){ 
  376.         System.out.println("Number of datasets before insert: " + (count("angestellter")+count("spieler")+count("trainer")+count("betreuer")+count("titel")+count("betreuertitel")+count("betreuen")+count("anfuehren")));
  377.         try{
  378.             Connection con = DriverManager.getConnection(database,user,pass);
  379.             Statement stmt = con.createStatement();
  380.             File angestellter = new File("angestellter.txt");      
  381.             Scanner sc = new Scanner(angestellter);
  382.             while(sc.hasNext()){
  383.                 stmt.executeUpdate(sc.nextLine());
  384.             }
  385.             sc.close();
  386.             stmt.close();
  387.             con.close();
  388.         }catch (SQLException e){
  389.             e.printStackTrace();       
  390.         }catch (FileNotFoundException e) {
  391.             e.printStackTrace();
  392.         }
  393.         System.out.println("Number of datasets after insert: "+ (count("angestellter")+count("spieler")+count("trainer")+count("betreuer")+count("titel")+count("betreuertitel")+count("betreuen")+count("anfuehren")));
  394.     }  
  395.    
  396.     public static void countAll(){
  397.         ArrayList<String> tableNames = new ArrayList<String>();
  398.         try{
  399.             Connection con = DriverManager.getConnection(database,user,pass);
  400.             Statement stmt = con.createStatement();
  401.             ResultSet rs = stmt.executeQuery("SELECT table_name FROM user_tables");
  402.             while(rs.next()){
  403.                 tableNames.add(rs.getString(1));
  404.             }
  405.             rs.close();
  406.             stmt.close();
  407.             con.close();
  408.             for(String x : tableNames){
  409.                 System.out.println(x + ": " + count(x));
  410.             }
  411.         }catch(SQLException e){
  412.             e.printStackTrace();
  413.         }
  414.     }
  415.    
  416.     public static void main(String args[]) {
  417.         if(args.length>0){
  418.             if(args[0].equals("count") && args[1].equals("all")){
  419.                 countAll();
  420.             }else if(args[0].equals("count")&& args.length==2){
  421.                 count(args[1]);
  422.             }else if(args[0].equals("insert") && args[1].equals("spiel")&& args.length==3){
  423.                 insertSpiel(Integer.parseInt(args[2]));
  424.             }else if(args[0].equals("insert") && args[1].equals("training") && args.length==3){
  425.                 insertTraining(Integer.parseInt(args[2]));
  426.             }else if(args[0].equals("insert") && args[1].equals("zuschauer")&& args.length==3){
  427.                 insertZuschauer(Integer.parseInt(args[2]));
  428.             }else if(args[0].equals("insert") && args[1].equals("betreuen")&& args.length==3){
  429.                 insertBetreuen(Integer.parseInt(args[2]));
  430.             }else if(args[0].equals("insert") && args[1].equals("spielen")){
  431.                 insertSpielen();
  432.             }else if(args[0].equals("insert") && args[1].equals("veranstalten")){
  433.                 insertVeranstalten();
  434.             }else if(args[0].equals("insert") && args[1].equals("basics")){
  435.                 insertBasics();
  436.             }else{
  437.                 System.out.println("Unknown command.");
  438.                 System.out.println("Following commands are availibe: ");
  439.                 System.out.println("count all, count <Tablename>, insert basics, insert spiel <amount>, insert training <amount>, insert zuschauer <amount>, insert betreuen <amount>, insert spielen, insert veranstalten");
  440.             }
  441.         }else{
  442.             System.out.println("Unknown command.");
  443.             System.out.println("Following commands are availibe: ");
  444.             System.out.println("count all, count <Tablename>, insert basics, insert spiel <amount>, insert training <amount>, insert zuschauer <amount>, insert betreuen <amount>, insert spielen, insert veranstalten");
  445.         }
  446.     }
  447. }
Add Comment
Please, Sign In to add comment