Zum Inhalt springen

dr.dimitri

Mitglieder
  • Gesamte Inhalte

    1.276
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von dr.dimitri

  1. Nein, das ist eine Zuweisung. So reservierst Du in deinem Fall Speicher: v_sr_id.extend(99); insert into tab select * from tab Ggf. noch Spalten im SELECT durch eigene Werte anpassen und mittels WHERE Bedingung einschränken. Das müsste man sich genauer ansehen, denn meistens kann man auch das mittels SQL lösen. Dim
  2. Wenn Du Daten kopieren möchtest, dann genügt genau ein Statement: insert into ziel select col1,col2,... from quelle; Fertig. Ok ein commit brauchst noch. Zu deinem anderen Problem: Du hast zwar einen Typ erzeugt und eine Variable dieses typs angelegt aber die Collection wurde nie initialisiert - sprich sie hat keinen ihr zugewiesenen Speicher. Dim
  3. Also das ganze ist nicht viel besser als das von vorher. Ein Connectionpool ist dazu da dir Connections zu geben und nicht dazu intern eine zu verstecken. public static synchronized Connection getConnection() { if(isConnected) return deineDSSource.getConnection(); else { Verbindung aufbauen und dann die Connection zurückgeben } } Im deinem Programmcode: public void deineFunktion() { Connection con=null; try { //Was auf der DB machen con=MeinPool.getConnection(); } catch(...){ ... } finally { ... if(con!=null) con.close(); //<---Hier wandert die Connection wieder in den Pool zurück } } private static Connection con = null; Brauchst Du nicht. Der Pool hält die Connections und gibt sie nach außen. In der Klasse selbst hat es keine Connections zu geben. Dann das hier: try { System.out.println("users: " + ds.getNumUserPools()); System.out.println("cons: " + ds.getNumConnections()); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); Wird das hier ausgeführt bevor Du connect() aufgerufen hast bekommst Du eine NullPointerException. Damit ist auch Deine zweite try catch Konstruktion ad absurdum geführt, denn soweit wirst Du ohne vorherigen connect nie kommen. Das ist nicht komisch, das ist der Sinn und Zweck eines ConnectionPools! Die Zeit die nötig ist eine Connection aufzubauen wird nur einmal benötigt. Danach wandert die Connection wieder in den Pool zurück und kann wiederverwendet werden. Verwechsle das nicht mit einer Factory, die dir Connections erzeugt die eigenständig sind und dann wieder geschlossen werden. Beachte auch die besonderheiten, die man beim SingletonPattern u.a. in einem Container berücksichtigen muss. Hau die executeQuery Methode raus. Das hat in einem Pool nichts zu suchen. Des weiteren müssen statische Methoden in einer Multithreading Umgebung zwingen per synchronize gegen konkurierende Zugriffe geschützt werden. Dim
  4. Hi, ich glaub Du hast hier einen recht großen Denkfehler drinnen MysqlConnectionPoolDataSource ds = new MysqlConnectionPoolDataSource(); Du legst ein lokales Objekt an. Nach Beendigung der Methode ist es weg und das entspricht nicht so ganz dem Grundgedanken des Poolings. Bevor das Poolingobjekt gelöscht wird holst Du dir eine Connection raus und speicherst sie in einem nicht näher genannten Objekt rc. Zum einen darf der Pool keine lokales Objekt sein, zum anderen solltest Du nur eine Methode haben, die aus dem Pool eine Connection zurückgibt und nicht mehr. Warum du das nochmal zwischenspeicherst kann ich nicht nachvollziehen. Nachdem Du die Connection nicht mehr brauchst close aufrufen und sie wandert wieder in den Pool zurück. Dim
  5. Das ist sicherlich nicht der klassische Weg. Das Auslesen sparen wir uns nämlich der Einfacheit halber: update tabelleXZ set spalteXY=spalteXY+1 WHERE ... Dim
  6. Weil ich grade drübergestolpert bin: <Korintenkakerermodus> Vgl. Oracle Doku Absatz 1.2.1.2. Also keine Diskussion. </Korintenkakerermodus> Dim PS: Kaker ist absichtlich falsch geschrieben wegen den *****
  7. Das bringt keine mir bekannten Vor- oder Nachteile. Manche machen's andere nicht. Ich würd's nicht tun wenn ich nicht müsste. Dim
  8. Ein Date oder Timestamp ist ein reiner Binärwert. Der Client bestimmt wie er angezeigt werden soll. das kann entweder durch ein to_char erfolgen oder durch setzen des NLS_DATE_FORMAT Wertes. Mit richtiger oder falscher Auswertung von sqlplus hat das nicht zu tun. Dim
  9. Ganz einfach. Kauf die Tax oder eine andere Steuersoftware für ein paar Euro und mach Deine Steuererklärung. Die schickst Du dann ein und zwei bis drei Wochen später ist das Geld auf Deinem Konto. Dim
  10. Ich hab einen ähnlichen Weg gewählt wie Du ihn vorhast. Nach der 10 Klasse Gym (Bayern) auf die FOS (Technischer Zweig) gewechselt und nach einem kurzen Intermezzo von 2 Semester E-Technik hab ich eine Ausbildung zum FIAE gemacht. Das ist jetzt 8 Jahre her und beginne jetzt mit Informatik (Diplom) an der Wilhelm Büchner FH. Ich weiß nicht, woher Du diese Vorlesung hast, aber such mal in iTunes nach "Informatik". Da sind einige kostenlose und interessante Podcasts dabei u.a. Algorithmen A von der Uni Osnabrück sowie diverse Vorlesungen vom HPI. Gute Noten und Interesse in/an Mathe sind selbstredend. Ich bring mich momentan mit ca. 3 Stunden/Tag Abends unter der Woche und 6-8 Stunden/Tag am WE wieder auf Betriebstemperatur. Papula läßt grüßen. Dim
  11. So einen kannte ich auch mal. Die Aussage: "Gewöh'n Dir mal einen anderen Ton an wenn Du mit mir sprichst" hat erstaunlicherweise einiges bewirkt. Ist jetzt kein wasserdichter Tipp, aber wichtig bei solchen Typen ist es die Beleidigungen die sie rumspucken nicht anzunehmen und sie statt dessen bei Ihrem Stolz zu packen. Wirksam beim Rummaulen und Nichterledigen von diversen Tätigkeiten ist auch das Unterstellen von Inkompetenz: Z.B. "Kannst Du das machen oder soll es besser wieder XY erledigen?" Nicht einmal ignorieren trifft solche Personen meist auch hart, da sie augenscheinlich etwas loswerden wollen und dann nicht mehr können. Zumindest bist Du in der "glücklichen" Position, dass er keinen Rückhalt bei deinen direkten Kollegen hat und auch kein Vorgesetzter ist. Könnte dann nämlich auch deutlich schlimmer sein. Dim
  12. SQL arbeitet mengenorientiert. Du bekommst in deinem Subselect eine Menge x von IDs und für jede dieser IDs wird der Updatebefehl einmal in der angegebenen Menge durchlaufen. In deinem Fall eben 8 mal. Oh je. Ich weiß Du bist Einsteiger in dem Bereich, aber das ist in etwa so, wie wenn ein Führerscheinneuling frägt, was der Tankdeckel ist. Mit Commit schreibst Du die Änderungen die Du gmeacht hast in der Datenbank fest. Das Gegenteil wäre ein Rollback, der die Änderungen wieder auf den vorherigen Stand zurückfährt. Zu Deinem eigentlichen Problem: Du benötigst das, was man eine korrelierte Subquery nennt: UPDATE xt_products_description a SET a.products_name = (select concat( "Adidas", " ", a.products_name ) from xt_products b where a.products_id=b.products_id and b.manufacturers_id =2) WHERE products_id IN ( SELECT products_id FROM xt_products WHERE manufacturers_id =2) Damit wird zum einen eine Verknüpfung zwischen der zu ändernden Sätzen und der Lookuptabelle hergestellt (Subquery), zum anderen wird in der äußeren WHERE Klausel die überhaupt zu bearbeitende Menge in xt_products_description eingeschränkt. Würde die äußere WHERE Klausel wegbleiben, würde dieses UPDATE alle Beschreibungen auf NULL setzen, die in der Subquery keine Entsprechung finden. Des weiteren empfehle ich Dir (und vielleicht auch einigen anderen) dringend dieses Buch Dim
  13. Sieht gut aus, schlägt aber fehl, wenn es mehr als einen Satz für die hersteller_id=2 gibt. Statt = muss es IN heißen: WHERE produkt_id [B]IN[/B] (SELECT produkt_id FROM produkte WHERE hersteller_id=2) Dim
  14. Fast richtig: select * from tabelle a, (select max(id) id,nr from tabelle group by nr) b where a.id=b.id Alternativ geht natürlich auch min(id). Zum GROUP BY Fehler: Alle Felder die nicht in einer Aggregatsfunktion verwendet werden müssen zwingend ins GROUP BY aufgenommen werden. Ausnahme sind hier ältere mysql versionen, die zwar keine Meldung bringen meist aber auch nicht das gewünschte Ergebnis. Dim
  15. Ja durchaus, denn 37K hab ich als Einstiegsgehalt als FIAE bekommen (München, Versicherungsbereich). Dim
  16. Da wird nix zusammengebaut. Das INSERT steht fix und fertig wie es an die DB übergeben wird schon im Quellcode. Dim
  17. Ich kenn mysql nicht besonders, aber die Fehlermeldung sagt eher, dass der Befehl an sich schon nicht geparst werden konnte. Heißen die Spaltennamen wirklich so? Beim SELECT hast z.B. eine Verschreiber bei vorname drinnen. Fehlerbehandlung sollte man nicht als nachrangige Aufgabe sehen, sondern als Einheit die gleichzeitig zur Programmentwicklung durchgeführt wird. Alles andere führt meistens nur zu wirr durch die Gegend geworfenen Exceptions, die mehr oder weniger sinnvoll ausgewertet werden. Dim
  18. Hi, laut Javakonvention beginnen Variablennamen immer mit einem Kleinbuchstaben. Das solltest Du auch beherzigen. Zu deinem eigentlichen Problem: Den Insert hast Du ja schon und setzt auch die Bindvariablen richtig. Dann musst Du nur noch statt executeQuery (das wäre ein SELECT) ein execute abschicken. Warum baust Du dein SELECT zu kryptisch zusammen? select * from kunde where vorname=? and geschlecht=? and... Danach per setXxx die Binds setzen wie Du es schon beim Insert gemacht hast. Dim PS: Fehlerbehandlung und das Schließen von Ressourcen gehört in jedes Programm.
  19. Noch ein Niederbayer hier soso.. Also mal zu Deinen Antworten: Die Komponenten der Oracle Datenbank: Archive und Redo Log Dateien sind unterschiedliche Begriffe für die gleichen Dateien. Controllfiles werden nicht für die Verwaltung des Oracleservers eingesetzt sondern Speichern z.B. den ort der Datafiles, Checkpoints etc. Neben der SGA ist auch die PGA als wichtiger Speicherbereich zu nennen. In ihm spielen sich z.B. Sortiervorgänge ab, werden Sessioninformationen etc gespeichert . Von einem Leseprozess habe ich noch nie etwas gehört. Prozess Strukturen Es gibt noch viele andere Prozesse aber das was Du hast sind die wichtigsten und auch korrekt beschrieben. Logische und physikalische Oracle Struktur? Das Data Dictionary gehört nach deiner Definition zu den logischen Komponenten (es handelt sich um Tabellen und Views). Grundsätzlich versteh ich hier deine Aufteilung auch nicht ganz. Du vermischt beide Punkte miteinander. Vergessen hast Du z.B. Controllfiles, Parameterfiles und Passwordfiles als physikalische Strukturen. SGA, PGA gehören zu den logischen Bestandteilen. Grundsätzlich nennt man alles handfeste "die Datenbank" und alles was im Speicher stattfindet (z.B. Prozesse, Speicherbereiche) Instance. Transaktionskontrolle In Oracle gibt es kein BEGIN TRANSACTION. Ein Commit/Rollback beendet die eine Transaktion und ist gleichzeitig der Startpunkt für eine neue. Auch gibt es in Oracle kein Autocommit (auch wenn manche Anwendungen das clientseitig simulieren) Ansonsten passt das ganz gut.
  20. Hi, dynamisches SQL ist es dann, wenn es zu Laufzeit geparst wird. Das bedeutet, egal ob es mit oder ohne Parameter aufgerufen wird, es ist immer dynamisches SQL wenn Du z.B. in Java dafür ein Statement oder PreparedStatement brauchst um es abzuschicken. Statisches SQL wäre z.B. ein fest codiertes SQL Statement in einer PL/SQL Prozedur oder SQLJ. Der große Unterschied ist hier, dass zur Compiletime ein Precompiler über das Statement läuft und dort schon prüft ob es synataktisch korrekt ist. Ein Programm mit einem fehlerhaften statischem SQL wird nicht compiliert, handelt es sich um dynamisches SQL ist es komplett egal was Du da reinschreibst, denn die Korrektheit wird erst zur Laufzeit von der Datenbank selbst geprüft. Dim
  21. Wie groß ist die erwartete Ergebnismenge? Da mindestens ein Sort im Spiel ist, würden mich auch die Größen der PGA interessieren. Welches deiner (evtl. Kombination) Kriterien in der WHERE Klausel schränkt die Datenmenge am effektivsten ein? Wie sieht der Ausführungsplan aus und passen die Kardinalitäten die dort angegeben werden? Unabhängig davon: Ein solches SQL ist kaum für eine Ad Hoc Abfrage geeignet. Ich würde vorschlagen, dass Du anstelle einer View eine temporär genutzte Tabelle befüllst, diese indizierst und dann dort dein SQL absetzt. Eine View mit Outer Join auf 4 Tabellen hat nicht unbedingt den Ruf extrem performant zu sein. Dim PS: Was bedeutet "läuft ewig" und was wäre "läuft schnell genug" in Sekunden bzw. Minuten ausgedrückt?
  22. Was ich nicht ganz nachvollziehen kann ist, warum so viele hier Probleme damit haben, wenn jemand stolz darauf ist was er erreicht hat. Wenn sich jemand einen Porsche kauft - warum nicht, und wenn jemand seine Berufsbezeichnung auf eine Visitenkarte druckt, was stört euch daran - dafür ist eine Visitenkarte da. Druck doch eure Berufsbezeichnung drauf oder findet ihr diese nicht gut genug? Das ganze ist nur eine weitere Diskussion nach dem Schema FIAE vs. FISI vs. IT-Kaufmann, Mittlere Reife vs. Quali vs. (Fach)Abitur. Alles wurde hier schon des öfteren mehr oder weniger objektiv durchgekaut. Dim
  23. Ist'n Künmstlername Danke. Hoffentlich lohnen sich die 290€/Monat dann auch mal. Ich hab mir mal die Informatikvorlesungen der Uni Osnabrück angesehen (als Podcast über iTunes verfügbar) und was Programmierung betrifft, sollte ich nach 8 Jahren Java und PL/SQL Entwicklung wohl keine großen Probleme haben da einzusteigen. Mehr Sorgen mach' ich mir da eher wegen meiner etwas eingerosteten Mathekenntnisse. Dim
  24. Nachdem ich im Januar ein Fernstudium zum Diplom Informatiker beginne (bin wohl einer der letzten, die diesen Grad erhalten können), kann ich euch ja mal berichten ob es danach großartige Veränderungen gegeben hat. In vier Jahren oder so... Dim

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...