Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement