Zum Inhalt springen

AJRames

Mitglieder
  • Gesamte Inhalte

    22
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von AJRames

  1. Hm, ok....wär halt weniger arbeit für den Webserver, darum dacht ich mir lös ich das mit so ne procedure... Aber dann halt nicht trotzdem danke!
  2. Hi Leut, ich hab n kleines Problem und mein "Lösungsweg" funktioniert leider nicht. Folgendes: Ich schreibe einen Datensatz in eine Tabelle. Mit 2 Werten aus diesem Datensatz möchte ich eine Rechenoperation durchführen (spalte 1 - spalte 2 = Inhalt von Spalte 3). Nun habe ich versucht dafür einen Trigger zu schreiben, aber das geht nicht, da ich auf die Tabelle, auf die der Datensatz geschrieben wird den trigger ansetz... Da kommt die Fehlermeldung: "#1442 - Can't update table 'a_num_ranges' in stored function/trigger because it is already used by statement which invoked this stored function/trigger." Der Trigger sieht ungefähr so aus: CREATE TRIGGER calc_count_range AFTER INSERT ON test FOR EACH ROW BEGIN UPDATE test SET count = NEW.short_from-NEW.short_to; END Jemand ne idee?
  3. Ja, 31.07 sollte da stehn Mein Fehler... Aber anscheinend kann mir wohl keiner grad weiter helfen...
  4. SELECT * FROM (SELECT MAX(SUPPORT) AS SUPPORT, KDNR FROM TABELLE GROUP BY KDNR) WHERE SUPPORT < '"+end+"'; 'end' ist hierbei das Datum das ich manuell in mein Programm eingebe. Prizipiell ists das! Doch ich kann nicht mehr Als KDNR und das Supportdatum ausgeben. Ich bräuchte eigentlich dort auch alle felder.....Also: SELECT * FROM (SELECT * , MAX(SUPPORT) AS SUPPORT FROM.... Aber das nimmter nicht weil ja Support in dem * auch drin ist... Sobald ich mehr eingeb, gibts ne Fehlermeldung, zb: SELECT * FROM (SELECT MAX(SUPPORT) AS SUPPORT, KDNR, ANSPRECHPARTNER... FROM ... Fehler: Not in aggregate function or group by clause...
  5. Ja Group by hab ich mir auch gedacht, aber das kann ich meines wissens nur auf aggregatsfunktionen anwenden, das geht hier ja nicht.... (so ganz unwissend bin ich dann doch nicht ^^ ) @Amstelchen: Jep, ist ein Datumsfeld. Eigentlich führe ich die Abfrage auf einer Tabelle durch. Diese hat die Spalten: KDNR, Produkt, noch einige, Support. Ich bräucht die Infos vom "ältesten" (wenn mans so nennen will)
  6. Hi Leute! Ich weiss wieder nicht wie ich das lösen sollt. Folgender Aufbau. Ich habe Firmen in der Datenbank. Diese Firmen besitzen mehrere Produkte. Auf diese gekauften Produkte haben die Firmen jeweils Supportverträge. Z.b. Die Firma "FISI" hat ein Produkt "EINS" dessen Support am 31.05.2009 endet. und ein Produkt namens "ZWEI" dessen Support am 31.06.2009 endet. Nun möchte ich mit meiner Abfrage alle Firmen (und deren infos) ausgeben bei denen ein Produkt bis zum 31.07.2009 ausläuft. Theoretisch so ähnlich: SELECT DISTINCT KDNR FROM TABELLE WHERE SUPPORT < '31.07.2009' liefert das korrekte Ergebnis. Aber ich benötige mehr als nur die KDNR... Ein SELECT DISTINCT * geht ja nicht.... SELECT * FROM TABELLE WHERE SUPPORT < '31.07.2009'); Zeigt mir die eine Firma öfter an...das sollte auch nicht sein... Ich brauche die Firma nur einmal, damit ich weiß das bei Firma "Heinz" der support bis zum 31.07.2009 ausläuft. Jemand ne Idee?
  7. Danke nochmal Echt ne schwere Geburt, aber habs jetz fast, nur noch eine Frage. Bei mir siehts grad so aus das er nur die Uhrzeiten und Anfragen ausgibt wo bereits eine Anfrage war. Sprich so: 16.30 --> 9 16:45 --> 1 17:00 --> 1 Ich brauch jedoch auch die Info das z.b. um 7:00 Uhr keine Anfrage kam... Also ne ganze liste von 7 -18 Uhr....wie mach ich das am besten? z.B. 7:00 --> 0 7:15 --> 1 usw
  8. Danke für die schnelle Antwort! Aber ich versteh leider nicht wofür diese Zeile da ist: date_format(Datum, '%h:%i' )as uhrzeit, Ich glaub ich müsste sie verstehen, da ich mit HSQL arbeite und die entsprechend umändern muss! Danke!
  9. Hi Leute. Brauch mal dringend eure Hilfe. Ich muss eine Abfrage erstellen und weiss nicht weiter. Folgendes: Ich hab eine Tabelle die Anfragen speichert. Ich muss jetz ausgeben wieviele Anfragen im ersten Quartal eingegangen sind. Soweit sogut, aber das jetz auch noch mit Uhrzeit. Ich hätte es gern so das die Ausgabe der View oder Abfrage die ich erstelle so aussieht: Zeile1: Anfragen um 7.15 --> 30 Zeile2: Anfragen um 7.30 --> 15 Zeile3: Anfragen um 7.45 --> 12 usw bis 18 Uhr. Bin grad knapp davor ne While schleife zu machen und die Uhrzeit dann hochzählen zu lassen: SELECT COUNT(ID) FROM ANFRAGEN WHERE UHRZEIT LIKE ? AND Datum BETWEEN '2009-01-01' AND '2009-04-30'; Statt ? dann immer die Uhrzeit die ich in der While neu erstelle. Aber das wären pro Quartal 44 abfragen....nicht das Gelbe vom Ei.... Könnt ihr mir evtl. helfen? Danke schonmal, Gruß AJ
  10. Also ich häng momentan an dem Punkt nicht bei jedem Tastendruck eine Verbindung herzustellen. Hab jetzt die Klasse Verb um die Verbindung zu schaffen, dich habe ich ausgelagert: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Verb { public Connection con = null; public void verbinden(){ try { Class.forName("org.hsqldb.jdbcDriver"); } catch (Exception e) { System.out.println("ERROR: failed to load HSQLDB JDBC driver."); e.printStackTrace(); } try { con = DriverManager.getConnection( "jdbc:hsqldb:hsql://192.168.0.3/TrinityTestAJ", "sa", ""); } catch (SQLException e) { System.out.println("Keine Verbindung!"); } } } in der DROP hab ich halt das hier in der Variablendeklaration: private Verb v = new Verb(); Und test2 sieht jetz so aus: public DROP test2() throws SQLException { v.verbinden(); PreparedStatement ps = v.con.prepareStatement("SELECT NAME FROM ADRESSEN WHERE NAME LIKE '"+getText()+"%';"); ResultSet res = ps.executeQuery(); while (res.next()) { this.addData(res.getString("NAME")); } res.close(); v.con.close(); ps.close(); return this; } Die Verbindung wird logischerweise immernoch hergestellt...es ist halt so schöner und ich hab PreparedStatements benutzt (ich hoff richtig). Wie mache ich das das ich die Connection in ner Privaten Variable speicher, damit die Verbindung nicht immer hergestellt wird...? Sorry, aber wie gesagt, ich bin totaler neuling in dem Gebiet und die "proffessionellen" feinheiten von Java hab ich auch noch nicht so raus... Ist grad echt depremierend das ichs net hinbekomm des zeug so hinzukriegen das es effizient läuft Ich hoff es entspricht schon ein wenig dem wie du dir das vorstellst dim.
  11. Hi und Danke Ja, habs jetz so hinbekommen das es läuft, nur leider wird bis jetzt bei jedem Tastendruck eine neue DB-Verbdingung aufgebaut...Das möchte ich noch verhindern....irgendwie. Das mit den PreparedStatements ist auf jedenfall ne gute idee, kannte die nicht, da ich noch nicht so fit bin! Danke schonmal!
  12. Hi Leute! Brauch eure Hilfe, ich komm nicht mehr weiter, obwohl ich schon recht weit gekommen bin... Folgendes: Ich hab ne Datenbank im Hintergrund laufen und ein TextField. Dieses TextField überwache ich mit nem KeyListener und frag während der Eingabe nach ob die Daten in der DB vorhanden sind, falls es einen entsprechenden Eintrag gibt, füllt der Listener automatisch des Feld komplett (Autovervollständigung). Z.B. wenn ich "Ba" eingebe füllt er das TextFeld mit dem Namen "Bachmann". Nur leider klappt das nur auf die eine weise (Ich lass ne for schleife vorher laufen um die Eintrage aus der DB einzulesen). Die For schleife braucht jedoch ne weile und schluckt ressourcen. Ich möchte dies jedoch ohne for, sondern direkt auf die DB zugreifen. Hier nun der Code. Die GUI: package Richtig; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.*; import java.sql.SQLException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class TestKlasse2 extends JFrame{ private static final long serialVersionUID = 1L; private JButton bladefirma, bkundeninfo; private JLabel label, iplabel,jlKunden; private JPanel labelpanel, buttonpanel, editpanel; private JTextArea edit, edit2; private JTextField edit3, ip1, jtfKunden; private DROP d; public static String ipadresse; Ohr o = new Ohr(); public TestKlasse2() throws SQLException { super(); this.setTitle("AJ's"); bladefirma = new JButton("Drück mich"); bkundeninfo = new JButton("Info zum Kunden"); label = new JLabel("KundenNr:"); iplabel = new JLabel("ServerIP:"); jlKunden = new JLabel("Kundenname: "); labelpanel = new JPanel(); d = new DROP(50); edit = new JTextArea(); edit2 = new JTextArea(); edit3 = new JTextField(15); ip1 = new JTextField(15); jtfKunden = new JTextField(15); editpanel = new JPanel(new GridLayout(1,2)); editpanel.add(edit); editpanel.add(edit2); labelpanel.setLayout(new GridLayout(3,1)); labelpanel.add(label); labelpanel.add(edit3); labelpanel.add(iplabel); labelpanel.add(ip1); labelpanel.add(jlKunden); labelpanel.add(d.test2()); buttonpanel = new JPanel(); buttonpanel.setLayout(new GridLayout(1,2)); buttonpanel.add(bladefirma); buttonpanel.add(bkundeninfo); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(labelpanel, BorderLayout.NORTH); this.getContentPane().add(editpanel, BorderLayout.CENTER); this.getContentPane().add(buttonpanel,BorderLayout.SOUTH); bladefirma.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { ipadresse = ip1.getText(); o.ladeFirmenBez(edit); } }); bkundeninfo.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ ipadresse = ip1.getText(); edit2.append(o.infoZumKunden(edit3.getText())); edit2.append("\n"); } }); /**this.addKeyListener(new KeyAdapter(){ @Override public void keyTyped(KeyEvent e) { System.out.println("Jep"); } }); */ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Die Klasse für das TextFeld zur Verfollständigung: package Richtig; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; public class DROP extends JTextField implements KeyListener { private Vector<String> data = null; private boolean doNothingElse = false; private static final long serialVersionUID = 1L; public DROP(int lang) { super(lang); addKeyListener(this); data = new Vector<String>(); } public void setData(Vector<String> data) { this.data = data; } public void addData(String str) { data.add(str); } public void deleteData(String str) { data.remove(str); } private void quickSearch(String start) { for (String str : data) { if (str.startsWith(start)) { setText(str); select(start.length(), str.length()); doNothingElse = true; break; } } } private void handleKey(char key) { String selection = getSelectedText(); if (selection != null && selection.charAt(0) == key) { doNothingElse = true; setSelectionStart(getSelectionStart() + 1); } else if (selection != null) { String nonSelected = getText().substring(0, getText().length() - selection.length()) + key; quickSearch(nonSelected); } else { quickSearch(getText() + key); } } public void keyTyped(KeyEvent key) { if (doNothingElse == true) { key.consume(); doNothingElse = false; } } public void keyPressed(KeyEvent key) { if (Character.isLetter(key.getKeyChar()) || key.getKeyChar() == ' ') { handleKey(key.getKeyChar()); } } public void keyReleased(KeyEvent key) { } public DROP test() { //DB Verbindung Herstellen try { Class.forName("org.hsqldb.jdbcDriver"); } catch (Exception e) { System.out.println("ERROR: failed to load HSQLDB JDBC driver."); e.printStackTrace(); } Connection con = null; try { con = DriverManager.getConnection( "jdbc:hsqldb:hsql://192.168.0.3/TrinityTestAJ", "sa", ""); } catch (SQLException e) { System.out.println("Keine Verbindung!"); } Statement state = null; try { state = con.createStatement(); } catch (SQLException e) { System.out.println("Kann kein Statement erzeugen"); } //DB Verbindung ist hergestellt worden System.out.println("Verbindung Steht"); ; for(int i=10105;i<10800;i++){ String sql = "SELECT NAME FROM ADRESSEN WHERE FIRMANR="+i+";"; try { ResultSet res = state.executeQuery(sql); while (res.next()) { String name = res.getString("NAME"); this.addData(name); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); //return name; } } return this; } public DROP test2() throws SQLException { //DB Verbindung Herstellen try { Class.forName("org.hsqldb.jdbcDriver"); } catch (Exception e) { System.out.println("ERROR: failed to load HSQLDB JDBC driver."); e.printStackTrace(); } Connection con = null; try { con = DriverManager.getConnection( "jdbc:hsqldb:hsql://192.168.0.3/TrinityTestAJ", "sa", ""); } catch (SQLException e) { System.out.println("Keine Verbindung!"); } Statement state = null; try { state = con.createStatement(); } catch (SQLException e) { System.out.println("Kann kein Statement erzeugen"); } //DB Verbindung ist hergestellt worden System.out.println("Verbindung Steht"); DROP drop = new DROP(15); String sql1 = "SELECT FIRMANR FROM ADRESSEN WHERE NAME LIKE '"+"Ba"+"%';"; System.out.println(sql1); ResultSet res = state.executeQuery(sql1); String sql2 = null; while (res.next()) { int kundennummer = res.getInt("FIRMANR"); System.out.println(kundennummer); sql2 = "SELECT NAME FROM ADRESSEN WHERE FIRMANR="+kundennummer+";"; //this.addData(namen); } try { System.out.println("test"); ResultSet resu = state.executeQuery(sql2); while (resu.next()) { String namen = resu.getString("NAME"); this.addData(namen); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); //return name; } return this; } /** public static void main(String[] args) { JFrame frame = new JFrame(); DROP stf = new DROP(); stf.test(); } die methode test() funktioniert, mit der for. test2() geht nicht. Mein Problem bei test2() ist diese Zeile: String sql1 = "SELECT FIRMANR FROM ADRESSEN WHERE NAME LIKE '"+"Ba"+"%';"; statt "Ba" möcht ich hier halt die Tastatureingabe. Und ich kriegs nicht hin Wäre froh wenn Ihr mir helfen könntet.... Danke! Gruß AJ
  13. Wenn ich keine IP des Servers eingetragen habe, sollte das programm ja schon nen fehler bringen, oder abstürzen, oder sonstwas tun. Aber dies ist nicht der Fall. Die Daten, die ich von der DB anfordere bekomme ich...aus irgend einem Grund wählt er den richtigen Server aus obwohl ich nichts als adresse hinterlegt habe...
  14. Ah, ok ^^ ja um den absturz kann ich mich da dann kümmern wenn das prog erstmal das ausführt was es soll...schon von anfang an... Z.b. das es gleich zu anfang abstürzt wenn ich keinen IP eingetragen hab...das wär ja dann schonmal "logisch" und ok
  15. Hallo Leute, ich habe ein kleines Problem. Wenn ich nen Button drücke der was mit der Datenbank machen soll wird immer zuerst dieser Teil hier abgearbeitet um die Verbindung zur Datenbank zu bekommen: //DB Verbindung Herstellen try { Class.forName("org.hsqldb.jdbcDriver"); } catch (Exception e) { System.out.println("ERROR: failed to load HSQLDB JDBC driver."); e.printStackTrace(); //return "ERROR: failed to load HSQLDB JDBC driver."; } Connection con = null; try { con = DriverManager.getConnection( "jdbc:hsqldb:hsql://192.168.0.3/TrinityTestAJ", "sa", ""); } catch (SQLException e) { System.out.println("Keine Verbindung!"); } Statement state = null; try { state = con.createStatement(); } catch (SQLException e) { System.out.println("Kann kein Statement erzeugen"); } //DB Verbindung Herstellen Jetzt ist es doch so, das ich bei jedem Button diesen Teil hier ändern muss wenn ich nen andern server habe: jdbc:hsqldb:hsql://192.168.0.3/TrinityTestAJ","sa", "" Nun habe ich mir gedacht ich mache ne statische Varbiable in einer Klasse, welche sich von einem Textfield die IP des Servers holt. Und diese wird dann in die Zeile da eingebaut...also so: "jdbc:hsqldb:hsql://"+TestKlasse2.ipadresse+"/TrinityTestAJ","sa", ""); Problem: Selbst wenn ich da keine IP stehn habe, holt er sich die Dateien...Und wenn ich ne Falsche IP eintippe, dann stürzt das Programm ab...beim Neustart des Programms der gleiche "fehler"... Beim Drücken des Buttons wird die IP übergeben, z.B.: knopf.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { System.out.println(ip1.getText()); ipadresse = ip1.getText(); o.ladeFirmenBez(edit); } }); Ich hoffe das ist jetzt nicht zuviel und ihr könnt mir helfen... Oder gibts ne andere Möglichkeit das Zentral zu lösen? Danke schonmal! Gruß AJ
  16. AJRames

    While Schleife / Return

    YES! Es geht so!! Danke!!! Also prinzipiell siehts jetz so aus: knopf.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { o.ladeFirmenBez(edit); } }); class Ohr{ public JTextArea ladeFirmenBez(JTextArea area) { //DB Verbindung Herstellen ... String sql = "SELECT FIRMATEXT FROM ADRESSEN";// WHERE FIRMATEXT = 'Ingenieurbüro Plant'"; try { ResultSet res = state.executeQuery(sql); while (res.next()) { String firmatext = res.getString("FIRMATEXT"); area.append(firmatext); area.append("\n"); } }catch (SQLException e) { System.out.println("Der Query ist Fehlerhaft"); } return area; }
  17. AJRames

    While Schleife / Return

    Ah, ich glaub jetz weiss ich was du meinst! Dann mach für ladeFirmenBez n konstrukter der n JTextArea erwartet. Dann füge ich die daten, die ich von der DB bekomme, da ein und als return gibst dann wieder n JTextArea? Versteh ich das richtig so?
  18. AJRames

    While Schleife / Return

    Warum das? ladeFirmenBez gibt ja den Firmenname wieder, und mit edit.append hänge ich diese dann in meine TextArea. Oder hab ich dich falsch verstanden? Bin kurz vorm aufgeben...nichtmal meine gedachte Lösung mit nem Array krieg ich hin...
  19. AJRames

    While Schleife / Return

    Hm, wie meinst du das genau? Ich hatte mir auch überlegt das ergebnis in ein String array zu schreiben, aber das wäre bei vielen Datensätzen einfach zuviel... Wie verhält sich deins bei großem Datenaufkommen? irgendwie ist mir noch kein Licht aufgegangen Danke!
  20. AJRames

    While Schleife / Return

    Hi, ja genau das ist mein Problem. Mein Ziel ist es das mein ActionListener immer den nächsten Datensatz übergeben bekommt und z.B. alle Kunden der Firma anzeigt. Jedoch wird nur ein Kunde ausgegeben, wegen dem Return. Wie kann ich das anstelln das ein Kunde nach dem andern an den ActionListener übergeben wird? Gruß AJ
  21. Hi Leute, ich brauch eure Hilfe da ich absolut nicht mehr weiter komme. Mein Problem ist eine Datenbankabfrage, die ich mit einer While schleife durchführe: String sql = "SELECT * FROM ADRESSEN"; try { ResultSet res = state.executeQuery(sql); String firmatext = null; while (res.next()){ firmatext = res.getString("FIRMATEXT"); System.out.println(firmatext); return firmatext; } }catch (SQLException e) { System.out.println("Der Query ist Fehlerhaft"); } Mein Problem ist das er beim return die Schleife verlässt! Ohne dieses return wird mir alles was ich brauche in der Konsole ausgegeben. Jetz ist es halt so das dieses funktionieren soll, da in der GUI Klasse das hier wartet: knopf.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { edit.append(o.ladeFirmenBez()); edit.append("\n"); } }); Doch leider wird wegen dem return nur eine Firmenbezeichnung ausgegeben... Wäre froh wenn ihr mir helfen könntet, wie ich das anders lösen kann. (Der Stil der Buttonabfrage soll jedoch so bleiben) Gruß AJ

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...