private static void insertCPI( String[] COLUMN_NAMES, Connection conn, Statement stmt, Integer count, int batchSize, StringBuffer sb, CopyManager cpManager, PushbackReader reader) throws SQLException, ClassNotFoundException { // TODO Auto-generated method stub Timestamp timestampStart = new Timestamp(System.currentTimeMillis()); DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); // dateFormat.format(System.currentTimeMillis()); // System.out.println("dateFormat : "+dateFormat.format(System.currentTimeMillis())); System.out.println("count in insertCPI :" + count); // CopyManager cpManager = ((PGConnection)conn).getCopyAPI(); // PushbackReader reader = new PushbackReader( new StringReader(""), 10000 ); for (int i = 0; i < COLUMN_NAMES.length; i++) { if (i == 0) { sb.append("").append(COLUMN_NAMES[0]).append(","); } else if (i == COLUMN_NAMES.length - 1) { COLUMN_NAMES[i] = dateFormat.format(System.currentTimeMillis()); sb.append(COLUMN_NAMES[i]).append(""); } else { sb.append(COLUMN_NAMES[i]).append(","); } /** * if(i==0){ sb.append("'").append(COLUMN_NAMES[0]).append("','"); } else * if(i==COLUMN_NAMES.length-1){ sb.append(COLUMN_NAMES[i]).append("'"); } else { * sb.append(COLUMN_NAMES[i]).append("','"); } * */ } sb.append("\n"); System.out.println("insert string : " + sb.toString()); if (count % batchSize == 0) { try { // System.out.println("insert string batch : "+sb.toString()); reader.unread(sb.toString().toCharArray()); cpManager.copyIn("COPY JOB FROM STDIN WITH CSV", reader); sb.delete(0, sb.length()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
public void record(FeedMessage feedMessage) throws SQLException { int numAlerts = 0; int numTripUpdates = 0; int numVehiclePositions = 0; mOpenQueries = 0; for (FeedEntity entity : feedMessage.getEntityList()) { if (entity.hasAlert()) { numAlerts++; } if (entity.hasTripUpdate()) { numTripUpdates++; } if (entity.hasVehicle()) { numVehiclePositions++; } } boolean hasAlerts = numAlerts > 0; boolean hasTripUpdates = numTripUpdates > 0; boolean hasVehiclePositions = numVehiclePositions > 0; mLogger.info( String.format( "Entities: alerts=%d, updates=%d, positions=%d", numAlerts, numTripUpdates, numVehiclePositions)); mLogger.info("Clearing tables..."); if (hasAlerts) { clearAlertsData(); } if (hasTripUpdates) { clearTripUpdatesData(); } if (hasVehiclePositions) { clearVehiclePositionsData(); } mLogger.info("Finished clearing tables"); if (!hasAlerts && !hasTripUpdates && !hasVehiclePositions) { mLogger.info("Nothing to record"); return; } boolean useCopy = mConnection instanceof BaseConnection; CopyManager cm = null; DataCopier tuCopier = null; DataCopier stCopier = null; DataCopier vpCopier = null; CopyIn tuCopyIn = null; CopyIn stCopyIn = null; CopyIn vpCopyIn = null; if (useCopy) { cm = new CopyManager((BaseConnection) mConnection); tuCopier = new DataCopier(); stCopier = new DataCopier(); vpCopier = new DataCopier(); if (hasTripUpdates) { stCopyIn = cm.copyIn(COPY_TRIP_UPDATES_STOP_TIMES); mOpenQueries++; stCopier = new DataCopier(stCopyIn, COPY_SEPARATOR); } else if (hasVehiclePositions) { vpCopyIn = cm.copyIn(COPY_VEHICLE_POSITIONS); mOpenQueries++; vpCopier = new DataCopier(vpCopyIn, COPY_SEPARATOR); } } for (FeedEntity entity : feedMessage.getEntityList()) { if (entity.hasAlert()) { try { recordAlert(entity.getAlert()); } catch (SQLException e) { mLogger.warning(getString(e)); } } if (entity.hasTripUpdate()) { try { recordTripUpdate(entity.getTripUpdate(), tuCopier, stCopier); } catch (Exception e) { mLogger.warning(getString(e)); } } if (entity.hasVehicle()) { try { recordVehicle(entity.getVehicle(), vpCopier); } catch (Exception e) { mLogger.warning(getString(e)); } } } if (hasAlerts) { mLogger.info("Committing alerts... "); try { mStatements.get(STALERT).executeBatch(); mStatements.get(STALERT_ENTITIES).executeBatch(); mStatements.get(STALERT_TIMERANGES).executeBatch(); mLogger.info("done"); } catch (Exception e) { mLogger.warning(getString(e)); } } if (hasTripUpdates) { mLogger.info("Committing trip updates... "); try { if (stCopier == null) { mStatements.get(STTRIPUPDATE_STOPTIMEUPDATES).executeBatch(); } else if (stCopyIn == null && stCopier.size() > 0) { stCopyIn = cm.copyIn(COPY_TRIP_UPDATES_STOP_TIMES); mOpenQueries++; stCopier.write(stCopyIn, COPY_SEPARATOR); } } catch (SQLException e) { e.printStackTrace(); } if (stCopyIn != null) { try { stCopyIn.endCopy(); mOpenQueries--; } catch (Exception e) { mLogger.warning(getString(e)); } } try { if (tuCopier == null) { mStatements.get(STTRIPUPDATE).executeBatch(); } else if (tuCopyIn == null && tuCopier.size() > 0) { tuCopyIn = cm.copyIn(COPY_TRIP_UPDATES); mOpenQueries++; tuCopier.write(tuCopyIn, COPY_SEPARATOR); } } catch (SQLException e) { e.printStackTrace(); } if (tuCopyIn != null) { try { tuCopyIn.endCopy(); mOpenQueries--; } catch (Exception e) { mLogger.warning(getString(e)); } } mLogger.info("done"); } if (hasVehiclePositions) { System.err.print("Committing vehicle positions... "); try { if (vpCopier == null) { mStatements.get(STVEHICLE).executeBatch(); } else if (vpCopyIn == null && vpCopier.size() > 0) { vpCopyIn = cm.copyIn(COPY_VEHICLE_POSITIONS); mOpenQueries++; vpCopier.write(vpCopyIn, COPY_SEPARATOR); } } catch (Exception e) { mLogger.warning(getString(e)); } if (vpCopyIn != null) { vpCopyIn.endCopy(); mOpenQueries--; } mLogger.info("done"); } }
/** @param args */ public static void main(String[] args) { try { Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } // Datenbankverbindung aufbauen String url = "jdbc:postgresql://localhost/Bundestagswahl?user=user&password=1234"; Connection conn; Statement st; ResultSet rs = null; // Datenbank neu aufsetzen if (setupDatabase) { String[] init = {""}; BWSetupDatabase.main(init); } // Stimmen pro Wahlkreis aus wkumrechnung200x.csv auslesen // und in stimmen200x.csv Einzelstimmen schreiben try { try { conn = DriverManager.getConnection(url); st = conn.createStatement(); CSVReader readerErgebnis[] = new CSVReader[2]; CSVWriter writerErststimmen[] = new CSVWriter[2]; CSVWriter writerZweitstimmen[] = new CSVWriter[2]; if (generateStimmen) { readerErgebnis[0] = new CSVReader( new BufferedReader( new InputStreamReader(new FileInputStream(ergebnis05Pfad), "UTF-8")), ';'); readerErgebnis[1] = new CSVReader( new BufferedReader( new InputStreamReader(new FileInputStream(ergebnis09Pfad), "UTF-8")), ';'); writerErststimmen[0] = new CSVWriter( new BufferedWriter( new OutputStreamWriter(new FileOutputStream(erststimmen05Pfad), "UTF-8")), ';'); writerErststimmen[1] = new CSVWriter( new BufferedWriter( new OutputStreamWriter(new FileOutputStream(erststimmen09Pfad), "UTF-8")), ';'); writerZweitstimmen[0] = new CSVWriter( new BufferedWriter( new OutputStreamWriter(new FileOutputStream(zweitstimmen05Pfad), "UTF-8")), ';'); writerZweitstimmen[1] = new CSVWriter( new BufferedWriter( new OutputStreamWriter(new FileOutputStream(zweitstimmen09Pfad), "UTF-8")), ';'); } st.executeUpdate("DELETE FROM wahlberechtigte;"); for (int jahr = 0; jahr < 2; jahr++) { String jahrName = Integer.toString(2005 + jahr * 4); if (generateStimmen) { System.out.println("\nGenerating started"); String[] readLineErgebnis; // Wahlberechtigte Tabelle leeren // kerg.csv------------------------------------ // Anfangszeilen überspringen und Header auslesen readerErgebnis[jahr].readNext(); readerErgebnis[jahr].readNext(); readLineErgebnis = readerErgebnis[jahr].readNext(); readerErgebnis[jahr].readNext(); readerErgebnis[jahr].readNext(); // Beschriftung einlesen und Spalten Parteien zuordnen HashMap<Integer, String> parteienSpalte = new HashMap<Integer, String>(); for (int i = 19; i < 132; i = i + 4) { parteienSpalte.put(i, readLineErgebnis[i]); } // Benötige Variablen int erststimmzettelnummer = 1; int zweitstimmzettelnummer = 1; int aktuelleKandidatennummer = 0; int aktuelleParteinummer = 0; while ((readLineErgebnis = readerErgebnis[jahr].readNext()) != null) { if (!readLineErgebnis[0].trim().equals("") && !readLineErgebnis[2].trim().equals("") && !readLineErgebnis[2].equals("99")) { int wahlkreisnummer = Integer.parseInt(readLineErgebnis[0]); String wahlkreisname = readLineErgebnis[1]; System.out.println("\n" + wahlkreisnummer + " - " + wahlkreisname); // Ladebalken int wahlberechtigte = Integer.parseInt(readLineErgebnis[3]); System.out.println(wahlberechtigte); int aktelleBundeslandnummer = Integer.parseInt( getQueryResult( st, rs, "SELECT bundesland FROM wahlkreis WHERE jahr = " + jahrName + " AND wahlkreisnummer = " + wahlkreisnummer + ";")); // Wahlberechtigte einf�gen st.executeUpdate( "INSERT INTO wahlberechtigte VALUES (" + jahrName + "," + wahlkreisnummer + "," + wahlberechtigte + ");"); for (int i = 19; i < 132; i = i + 4) { System.out.print("."); // Ladebalken String partei = parteienSpalte.get(i); int erststimmenAnzahl = 0; int zweitstimmenAnzahl = 0; if (!readLineErgebnis[i].equals("")) erststimmenAnzahl = Integer.parseInt(readLineErgebnis[i]); if (!readLineErgebnis[i + 2].equals("")) zweitstimmenAnzahl = Integer.parseInt(readLineErgebnis[i + 2]); aktuelleParteinummer = Integer.parseInt( getQueryResult( st, rs, "SELECT parteinummer FROM partei WHERE name = '" + partei + "';")); if (zweitstimmenAnzahl > 0) { for (int j = 0; j < zweitstimmenAnzahl; j++) { String[] writeLine = { jahrName, Integer.toString(zweitstimmzettelnummer), Integer.toString(aktuelleParteinummer), Integer.toString(wahlkreisnummer), Integer.toString(aktelleBundeslandnummer) }; writerZweitstimmen[jahr].writeNext(writeLine); zweitstimmzettelnummer++; } } if (erststimmenAnzahl > 0) { aktuelleKandidatennummer = Integer.parseInt( getQueryResult( st, rs, "SELECT kandidatennummer FROM direktkandidat WHERE jahr = " + jahrName + " AND wahlkreis = " + wahlkreisnummer + " AND partei = " + aktuelleParteinummer + ";")); for (int j = 0; j < erststimmenAnzahl; j++) { String[] writeLine = { jahrName, Integer.toString(erststimmzettelnummer), Integer.toString(aktuelleKandidatennummer), Integer.toString(wahlkreisnummer) }; writerErststimmen[jahr].writeNext(writeLine); erststimmzettelnummer++; } } } } } writerZweitstimmen[jahr].close(); writerErststimmen[jahr].close(); readerErgebnis[jahr].close(); System.out.println("\nGenerating finished"); } SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss"); if (loadStimmen) { // Bulk Load der // ErstStimmen---------------------------------------- CopyManager copyManager = new CopyManager((BaseConnection) conn); String actPfad; String progressString; String talbeDestination; for (int stimme = 0; stimme < 2; stimme++) { System.out.println("\nCopying started: " + format.format(new Date())); switch (stimme) { case 0: talbeDestination = "erststimme"; switch (jahr) { case 0: actPfad = erststimmen05Pfad; progressString = "Erststimmen 2005 laden"; break; default: actPfad = erststimmen09Pfad; progressString = "Erststimmen 2009 laden"; break; } break; default: talbeDestination = "zweitstimme"; switch (jahr) { case 0: actPfad = zweitstimmen05Pfad; progressString = "Zweitstimmen 2005 laden"; break; default: actPfad = zweitstimmen09Pfad; progressString = "Zweitstimmen 2009 laden"; break; } break; } System.out.println(talbeDestination + " " + actPfad); InputStream in = new BufferedInputStream( CopyProgressMonitor.getCopyProgressMonitor(actPfad, progressString)); copyManager.copyIn( "COPY " + talbeDestination + " FROM STDIN WITH DELIMITER ';' CSV", in); System.out.println("\nCopying finished"); } } if (addConstraints) { System.out.println("\nAdding Constraints"); try { st.executeUpdate( "ALTER TABLE wahlberechtigte ADD CONSTRAINT wahlkreis FOREIGN KEY (jahr,wahlkreis) REFERENCES wahlkreis(jahr,wahlkreisnummer);"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE direktkandidat ADD CONSTRAINT politiker FOREIGN KEY (politiker) REFERENCES politiker;"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE direktkandidat ADD CONSTRAINT partei FOREIGN KEY (partei) REFERENCES partei;"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE direktkandidat ADD CONSTRAINT wahlkreis FOREIGN KEY (jahr,wahlkreis) REFERENCES wahlkreis(jahr,wahlkreisnummer);"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE listenkandidat ADD CONSTRAINT partei FOREIGN KEY (partei) REFERENCES partei;"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE listenkandidat ADD CONSTRAINT bundesland FOREIGN KEY (bundesland) REFERENCES bundesland;"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE listenkandidat ADD CONSTRAINT politiker FOREIGN KEY (politiker) REFERENCES politiker;"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE erststimme ADD CONSTRAINT kandidatennummer FOREIGN KEY (kandidatennummer) REFERENCES direktkandidat(kandidatennummer);"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE zweitstimme ADD CONSTRAINT bundesland FOREIGN KEY (bundesland) REFERENCES bundesland;"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE zweitstimme ADD CONSTRAINT partei FOREIGN KEY (partei) REFERENCES partei;"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE erststimmen ADD CONSTRAINT kandidatennummer FOREIGN KEY (kandidatennummer) REFERENCES direktkandidat(kandidatennummer);"); } catch (SQLException e) { e.printStackTrace(); } try { st.executeUpdate( "ALTER TABLE zweitstimmen ADD CONSTRAINT partei FOREIGN KEY (partei) REFERENCES partei;"); } catch (SQLException e) { e.printStackTrace(); } System.out.println("\nFinished"); } } // Stimmen aggregieren if (false) { System.out.println("\n Aggregate Stimmen"); try { st.executeUpdate("DELETE FROM erststimmen;"); st.executeUpdate("DELETE FROM zweitstimmen;"); st.executeUpdate( "INSERT INTO erststimmen SELECT jahr, wahlkreis, kandidatennummer, count(*) as anzahl FROM erststimme GROUP BY wahlkreis, kandidatennummer,jahr ORDER BY wahlkreis, anzahl;"); st.executeUpdate( "INSERT INTO zweitstimmen SELECT jahr, wahlkreis, partei, count(*) as anzahl FROM zweitstimme GROUP BY wahlkreis, partei,jahr ORDER BY wahlkreis, anzahl;"); } catch (SQLException e) { e.printStackTrace(); } // printQueryResult(st, rs, "zweitstimmen"); // printQueryResult(st, rs, "erststimmen"); System.out.println("\nFinished"); } // Parameter f�r Queries, �ber UI auszuw�hlen: String jahrName = "2005"; int wahlkreis = 1; // Initialize the service proxy. long millis = System.currentTimeMillis(); // Q4: Wahlkreissieger (Q3 ben�tigt View aus Q4) System.out.println("\n Q4: Wahlkreissieger"); try { st.executeUpdate( "CREATE OR REPLACE VIEW erststimmengewinner AS SELECT s1.wahlkreis, s1.kandidatennummer, s1.anzahl FROM erststimmen s1 , wahlkreis w WHERE s1.jahr = " + jahrName + " AND w.jahr = " + jahrName + " AND s1.wahlkreis = w.wahlkreisnummer AND s1.anzahl = ( SELECT max(s2.anzahl) FROM erststimmen s2 WHERE s2.jahr = " + jahrName + " AND s2.wahlkreis = w.wahlkreisnummer)"); st.executeUpdate( "CREATE OR REPLACE VIEW zweitstimmengewinner AS SELECT s1.wahlkreis, s1.partei, s1.anzahl FROM zweitstimmen s1 , wahlkreis w WHERE s1.jahr = " + jahrName + " AND w.jahr = " + jahrName + " AND s1.wahlkreis = w.wahlkreisnummer AND s1.anzahl = ( SELECT max(s2.anzahl) FROM zweitstimmen s2 WHERE s2.jahr = " + jahrName + " AND s2.wahlkreis = w.wahlkreisnummer)"); } catch (SQLException e) { e.printStackTrace(); } // printQueryResult(st, rs, "erststimmengewinner"); // printQueryResult(st, rs, "zweitstimmengewinner"); System.out.println("\nQ4 Finished: " + (System.currentTimeMillis() - millis)); millis = System.currentTimeMillis(); // Q2: Mitglieder des Bundestages System.out.println("\n Q2: Mitglieder des Bundestages"); st.executeUpdate( "CREATE OR REPLACE VIEW mitgliedererststimme AS " + "SELECT d.politiker , d.partei FROM erststimmengewinner esg, direktkandidat d WHERE esg.kandidatennummer = d.kandidatennummer"); // st.executeUpdate("CREATE OR REPLACE VIEW mitglieder AS(" // + "WITH verteilung AS ( " // + " SELECT * " // + " FROM erststimmenergebnis " // + " union all " // + " SELECT * " // + " FROM zweitstimmenergebnis)" // + // "SELECT lk.politiker, lk.partei FROM Listenkandidat lk,verteilung v, partei pa WHERE // pa.name = v.parteiname AND lk.partei = pa.parteinummer AND lk.listenplatz <= v.sitze- // (SELECT count(*) FROM mitgliedererststimme mes WHERE mes.partei = pa.parteinummer )" // + "UNION SELECT * FROM mitgliedererststimme )"); System.out.println("\nQ2 Finished: " + (System.currentTimeMillis() - millis)); millis = System.currentTimeMillis(); // Q3: Wahlkreis�bersicht System.out.println("\n Q3: Wahlkreis�bersicht"); try { st.executeUpdate( "CREATE OR REPLACE VIEW wahlbeteiligungabsolut AS " + "SELECT sum(anzahl) FROM erststimmen WHERE jahr = " + jahrName + " AND wahlkreis = " + wahlkreis); st.executeUpdate( "CREATE OR REPLACE VIEW wahlbeteiligungrelativ AS " + "SELECT (SELECT * FROM wahlbeteiligungabsolut) / ( SELECT wahlberechtigte FROM wahlberechtigte WHERE jahr = " + jahrName + " AND wahlkreis = " + wahlkreis + " )::float ;"); st.executeUpdate( "CREATE OR REPLACE VIEW erststimmengewinnerkandidat AS " + "SELECT name FROM politiker p , direktkandidat d WHERE p.politikernummer = d.politiker AND d.kandidatennummer = (SELECT e.kandidatennummer FROM erststimmengewinner e ORDER BY RANDOM() LIMIT 1)"); st.executeUpdate( "CREATE OR REPLACE VIEW parteinenanteilabsolut AS " + "SELECT p.parteinummer as parteinummer, (SELECT sum(zs.anzahl) FROM zweitstimmen zs WHERE zs.jahr = " + jahrName + " AND zs.partei = p.parteinummer) as anzahl FROM partei p"); st.executeUpdate( "CREATE OR REPLACE VIEW parteinenanteilrelativ AS " + "SELECT pa.parteinummer as parteinummer, pa.anzahl/(SELECT * FROM wahlbeteiligungabsolut) as anteil FROM parteinenanteilabsolut pa "); st.executeUpdate( "CREATE OR REPLACE VIEW parteinenanteilabsolutvorjahr AS " + "SELECT p.parteinummer, (SELECT sum(zs.anzahl) FROM zweitstimmen zs WHERE zs.jahr = " + Integer.toString(Integer.parseInt(jahrName) - 4) + " AND zs.partei = p.parteinummer) as anzahl FROM partei p"); st.executeUpdate( "CREATE OR REPLACE VIEW parteinenanteilveraenderung AS " + "SELECT pa1.parteinummer as parteinummer , pa1.anzahl-pa2.anzahl as anzahl FROM parteinenanteilabsolutvorjahr pa2, parteinenanteilabsolut pa1 WHERE pa1.parteinummer = pa2.parteinummer"); } catch (SQLException e) { e.printStackTrace(); } // printQueryResult(st, rs, "wahlbeteiligungabsolut"); // printQueryResult(st, rs, "wahlbeteiligungrelativ"); // printQueryResult(st, rs, "erststimmengewinnerkandidat"); // printQueryResult(st, rs, "parteinenanteilabsolut"); // printQueryResult(st, rs, "parteinenanteilrelativ"); // printQueryResult(st, rs, "parteinenanteilabsolutvorjahr"); // printQueryResult(st, rs, "parteinenanteilveraenderung"); System.out.println("\nQ4 Finished: " + (System.currentTimeMillis() - millis)); millis = System.currentTimeMillis(); // Q5: �berhangmandate System.out.println("\n Q5: �berhangmandate"); st.executeUpdate( "CREATE OR REPLACE VIEW ueberhangmandate AS " + "SELECT pes.parteiname, pes.sitze - pzs.sitze FROM erststimmenergebnis pes, zweitstimmenergebnis pzs WHERE pzs.parteiname = pes.parteiname AND (pes.sitze - pzs.sitze) > 0 "); System.out.println("\nQ5 Finished: " + (System.currentTimeMillis() - millis)); millis = System.currentTimeMillis(); // Q6: Knappster Sieger System.out.println("\n Q6: Knappster Sieger"); try { st.executeUpdate( "CREATE OR REPLACE VIEW knappstegewinner AS " + "SELECT s1.wahlkreis, s1.kandidatennummer, d.partei , " + "( SELECT min(s1.anzahl - s2.anzahl) FROM erststimmen s2 WHERE jahr = " + jahrName + " AND s1.anzahl - s2.anzahl > 0 AND s1.wahlkreis = s2.wahlkreis AND s1.kandidatennummer != s2.kandidatennummer) AS differenz" + " FROM erststimmen s1 , direktkandidat d WHERE s1.jahr = " + jahrName + " AND d.jahr = " + jahrName + " AND s1.kandidatennummer = d.kandidatennummer"); st.executeUpdate( "CREATE OR REPLACE VIEW knappsteergebnisse AS " + "(SELECT * FROM knappstegewinner ) UNION " + "(SELECT s1.wahlkreis, s1.kandidatennummer, d.partei , " + " ( SELECT min( differenz ) FROM ( SELECT (s2.anzahl - s1.anzahl) As differenz FROM erststimmen s2 WHERE jahr = " + jahrName + " AND s2.wahlkreis = s1.wahlkreis AND ( s2.anzahl - s1.anzahl ) > 0 ) AS ergebnissedifferenzen )" + " FROM erststimmen s1 , direktkandidat d WHERE s1.jahr = " + jahrName + " AND d.jahr = " + jahrName + " AND s1.kandidatennummer = d.kandidatennummer AND d.partei NOT IN ( SELECT k.partei from knappstegewinner k) )"); } catch (SQLException e) { e.printStackTrace(); } // printQueryResult(st, rs, "knappstegewinner"); // printQueryResult(st, rs, "knappsteergebnisse"); System.out.println("\nQ6 Finished: " + (System.currentTimeMillis() - millis)); millis = System.currentTimeMillis(); // Q7: Wahlkreisübersicht (Einzelstimmen) System.out.println("\n Q7: Wahlkreisübersicht (Einzelstimmen)"); try { st.executeUpdate( "CREATE OR REPLACE VIEW wahlbeteiligungabsoluteinzelstimmen AS " + "SELECT sum(anzahl) FROM (SELECT jahr, wahlkreis, kandidatennummer, count(*) as anzahl FROM erststimme GROUP BY wahlkreis, kandidatennummer,jahr) AS stimmen WHERE jahr = " + jahrName + " AND wahlkreis = " + wahlkreis); st.executeUpdate( "CREATE OR REPLACE VIEW wahlbeteiligungrelativeinzelstimmen AS " + "SELECT (SELECT * FROM wahlbeteiligungabsoluteinzelstimmen) / ( SELECT wahlberechtigte FROM wahlberechtigte WHERE jahr = " + jahrName + " AND wahlkreis = " + wahlkreis + " )::float ;"); st.executeUpdate( "CREATE OR REPLACE VIEW erststimmengewinnerkandidateinzelstimmen AS " + "SELECT name FROM politiker p , direktkandidat d WHERE p.politikernummer = d.politiker AND d.kandidatennummer = (SELECT e.kandidatennummer FROM (SELECT s1.wahlkreis, s1.kandidatennummer, s1.anzahl FROM ( SELECT jahr, wahlkreis, kandidatennummer, count(*) as anzahl FROM erststimme GROUP BY wahlkreis, kandidatennummer,jahr) s1 , wahlkreis w WHERE s1.jahr = " + jahrName + " AND w.jahr = " + jahrName + " AND s1.wahlkreis = w.wahlkreisnummer AND s1.anzahl = (SELECT max(s2.anzahl) FROM ( SELECT jahr, wahlkreis, kandidatennummer, count(*) as anzahl FROM erststimme GROUP BY wahlkreis, kandidatennummer,jahr) s2 WHERE s2.jahr = " + jahrName + " AND s2.wahlkreis = w.wahlkreisnummer)) e ORDER BY RANDOM() LIMIT 1)"); st.executeUpdate( "CREATE OR REPLACE VIEW parteinenanteilabsoluteinzelstimmen AS " + "SELECT p.parteinummer as parteinummer, (SELECT sum(zs.anzahl) FROM (SELECT jahr, wahlkreis, partei, count(*) as anzahl FROM zweitstimme GROUP BY wahlkreis, partei,jahr) zs WHERE zs.jahr = " + jahrName + " AND zs.partei = p.parteinummer) as anzahl FROM partei p"); st.executeUpdate( "CREATE OR REPLACE VIEW parteinenanteilrelativeinzelstimmen AS " + "SELECT pa.parteinummer as parteinummer, pa.anzahl/(SELECT * FROM wahlbeteiligungabsoluteinzelstimmen) as anteil FROM parteinenanteilabsoluteinzelstimmen pa "); st.executeUpdate( "CREATE OR REPLACE VIEW parteinenanteilabsolutvorjahreinzelstimmen AS " + "SELECT p.parteinummer, (SELECT sum(zs.anzahl) FROM (SELECT jahr, wahlkreis, partei, count(*) as anzahl FROM zweitstimme GROUP BY wahlkreis, partei,jahr) zs WHERE zs.jahr = " + Integer.toString(Integer.parseInt(jahrName) - 4) + " AND zs.partei = p.parteinummer) as anzahl FROM partei p"); st.executeUpdate( "CREATE OR REPLACE VIEW parteinenanteilveraenderungeinzelstimmen AS " + "SELECT pa1.parteinummer as parteinummer , pa1.anzahl-pa2.anzahl as anzahl FROM parteinenanteilabsolutvorjahreinzelstimmen pa2, parteinenanteilabsoluteinzelstimmen pa1 WHERE pa1.parteinummer = pa2.parteinummer"); } catch (SQLException e) { e.printStackTrace(); } printQueryResult(st, rs, "wahlbeteiligungabsoluteinzelstimmen"); printQueryResult(st, rs, "wahlbeteiligungrelativeinzelstimmen"); printQueryResult(st, rs, "erststimmengewinnerkandidateinzelstimmen"); printQueryResult(st, rs, "parteinenanteilabsoluteinzelstimmen"); printQueryResult(st, rs, "parteinenanteilrelativeinzelstimmen"); printQueryResult(st, rs, "parteinenanteilabsolutvorjahreinzelstimmen"); printQueryResult(st, rs, "parteinenanteilveraenderungeinzelstimmen"); System.out.println("\nQ7 Finished: " + (System.currentTimeMillis() - millis)); st.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
@SuppressWarnings("unchecked") private void vcsCopy() { Map<String, byte[]> file = (Map<String, byte[]>) ThreadMail.get("csv_file"); long rule = (long) ThreadMail.get("rule"); String view_name = (String) ThreadMail.get("view_name"); CopyManager copyManager = null; String bytesAsString = null; StringReader readers = null; BufferedReader reader = null; String line = null; String format = ""; String Sql = ""; String dropview = ""; String field = ""; try { copyManager = new CopyManager(getCon().unwrap(BaseConnection.class)); } catch (SQLException e2) { // TODO Auto-generated catch block e2.printStackTrace(); return; } for (String key : file.keySet()) { try { bytesAsString = new String(file.get(key), "UTF-8"); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); echo("error file get string"); return; } if (bytesAsString == null) return; readers = new StringReader(bytesAsString); reader = new BufferedReader(readers); try { line = reader.readLine(); line = line.replace(" ", "_"); dropview = "drop view if exists " + view_name; try { dbcreate(dropview); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } String[] lines = line.split(","); String act = ""; String asName = ""; for (int m = 0; m < lines.length; m++) { act = "act_v" + Integer.toHexString(m); asName += act + " as " + lines[m] + ","; field += act + ", "; } field = field.trim(); field = field.substring(0, field.length() - 1); asName = asName.substring(0, asName.length() - 1); if (copyManager != null) { copyManager.copyIn( "COPY " + DB_HOR_PRE + "class (" + field + ") FROM STDIN DELIMITER ',' ", reader); } format = "CREATE VIEW %s AS SELECT %s FROM " + DB_HOR_PRE + "class WHERE rule=%d"; Sql = String.format(format, view_name, asName, rule); dbcreate(Sql); Sql = "update " + DB_HOR_PRE + "class set rule=" + rule + " where rule=0"; update(Sql); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } echo("Done."); } }
/** * @param args * @throws IOException */ public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException { // TODO Auto-generated method stub String jdbcURL = "jdbc:postgresql://trinity0415.cbcslkvnswmn.us-west-1.rds.amazonaws.com/trinityaws"; String user = "******"; String pwd = "trinity123"; Connection conn = null; Statement stmt = null; ResultSet rs = null; final int batchSize = 5; Integer count = 0; int i, j; final String[] COLUMN_NAMES = new String[] { "", // "jobuid", 0 "", // "JobName", 1 "", // "Description", 2 "1", // "Activate", 3 "default", // "DomainUID", 4 "", // "categoryuid", 5, need to update for category changed. "", // "agentuid", 6 "", // "FrequencyUID", 7 "", // "FileSourceUID", 8 "1", // "JobType", 9 "0", // "Retry",10 "1", // "RetryInterval",11 "1", // "MaxRetryTime",12 "0", // "RetryMode",13 "1", // "Priority",14 "1", // "TimeWindowBegin",15 "1439", // "TimeWindowEnd",16 "0", // "TxDateRule",17 "0", // "TxOffsetDay",18 "1", // "BypassError",19 "O", // "status",20 "0", // "CriticalJob",21 "trinity", // "createuseruid",22 "", // "XMLData",23 "", // "OnlineDateTime",24 "", // "OfflineDateTime",25 "", // refjobuid character varying(36),26 "", // lastupdatetime timestamp without time zone DEFAULT now(), }; try { Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection(jdbcURL, user, pwd); conn.setAutoCommit(false); System.out.println("connected"); Date date = new Date(); System.out.println("Date : " + date); // Creating statement for db activities stmt = conn.createStatement(); // select jobcategory uid String query1 = "SELECT distinct categoryuid FROM JOBCATEGORY"; rs = stmt.executeQuery(query1); while (rs.next()) COLUMN_NAMES[5] = rs.getString("categoryuid"); // select AGENT uid String query2 = "SELECT distinct agentuid FROM JCSAGENT"; rs = stmt.executeQuery(query2); while (rs.next()) COLUMN_NAMES[6] = rs.getString("agentuid"); String query3 = "SELECT distinct categoryuid, agentuid, JobName, xmldata FROM JOB"; rs = stmt.executeQuery(query3); while (rs.next()) { COLUMN_NAMES[1] = rs.getString("JobName"); COLUMN_NAMES[23] = rs.getString("xmldata"); count++; } // StringBuffer sb=new StringBuffer("JobUID,JobName, // Description,Activate,DomainUID,categoryuid, agentuid, FrequencyUID, FileSourceUID, // JobType, // Retry,RetryInterval,MaxRetryTime,RetryMode,Priority,TimeWindowBegin,TimeWindowEnd,TxDateRule,TxOffsetDay,BypassError,status,CriticalJob,createuseruid,XMLData,OnlineDateTime,OfflineDateTime"); StringBuffer sb = new StringBuffer(); Timestamp timestampStart = new Timestamp(System.currentTimeMillis()); CopyManager cpManager = ((PGConnection) conn).getCopyAPI(); PushbackReader reader = new PushbackReader(new StringReader(""), 10000); while (count < 30) { count++; COLUMN_NAMES[1] = "job"; COLUMN_NAMES[0] = UUID.randomUUID().toString(); // COLUMN_NAMES[0]=UUID.randomUUID().toString().replaceAll("[\\W]|_", ""); COLUMN_NAMES[1] = COLUMN_NAMES[1] + count; // COLUMN_NAMES[2]=dateFormat.format(System.currentTimeMillis()); // insertVSI(COLUMN_NAMES,conn, stmt); insertCPI(COLUMN_NAMES, conn, stmt, count, batchSize, sb, cpManager, reader); insertMultiStepFromJobUid.main(COLUMN_NAMES); // call jobstep here. } reader.unread(sb.toString().toCharArray()); cpManager.copyIn("COPY JOB FROM STDIN WITH CSV", reader); conn.commit(); Timestamp timestampEnd = new Timestamp(System.currentTimeMillis()); System.out.println("time elapsed : " + (timestampEnd.getTime() - timestampStart.getTime())); } finally { if (conn != null) { System.out.println("[job]connection closed!"); // clean(conn); conn.close(); } } }