Announcement

Collapse
No announcement yet.

Abfrage, ob Wert schon vorhanden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfrage, ob Wert schon vorhanden

    hi,

    ich bin grad an ner Java-Programm, das ich modifizieren muss.
    Im Prinzip ne Maske, die Daten/Parameter von ner Datenbank abruft.

    Wenn ein neuer Datensatz (über Maske) angelegt werden soll, generiert das Programm eine SQL-Anweisung. [INSERT INTO xyz() VALUES ()].

    In der Datenbank sind Kennummern für die Datensätze (ca 1850 Stk.)gespeicher. Großteils sind es fortlaufende Nummern, aber eben nicht alle. (10, 11, 12, 100, 101, ...1500, 1600, 1601...)

    Wie kann ich jetzt überprüfen, welche die letzte / größte Kennummer ist, damit ich bei einem neuen Datensatz Kennummer+1 machen kann

    Ist wahrscheinlich ne noob-Frage, aber ich weiß es einfach nicht.

    mfg Maddin

  • #2
    select MAX(Feld) ....
    Christian

    Comment


    • #3
      Guten Morgen!!!

      Ich habs jetz mal so gemacht, funktioniert aber nicht.

      JDBCAdapter ja = new JDBCAdapter();
      ja.executeQuery("SELECT MAX(Kennummer) FROM xyz");

      Object test1 = JDBCAdapter.rows.elementAt(0);
      String str = test1.toString();
      int intstr = Integer.parseInt(str);
      intstr = intstr+1;

      stmt = stmt + Kennummer + intstr;

      Was mache ich falsch?? Kann mir bitte jemand helfen?

      //Maddin

      Comment


      • #4
        funktioniert aber nicht.
        Ist keine Fehlermeldung
        Christian

        Comment


        • #5
          Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "[12352]"
          at java.lang.NumberFormatException.forInputString(Unk nown Source)
          at java.lang.Integer.parseInt(Unknown Source)
          at java.lang.Integer.parseInt(Unknown Source)
          at firma.xyz.InsertDB.<init>(InsertDB.java:256)
          at firma.xyz.OutputTableNew2.actionPerformed(OutputTa bleNew2.java:1724)
          at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
          at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
          [...] usw.

          Besser? oder was benötigt ihr?

          Comment


          • #6
            int intstr = Integer.parseInt(str);

            Der String enthält Zeichen, die nicht als Ziffer interpretiert werden können

            str = str.replaceAll("[^0-9]", "");


            sollte helfen
            Zuletzt editiert von Christian Marquardt; 17.06.2009, 10:00.
            Christian

            Comment


            • #7
              hmm, was bewirkt dieser befehl?? Ich möchte nicht an der Datenbank herumpfuschen...

              und das Feld "Kennummer" enthält definitiv keine anderen Daten als ganze Zahlen.

              evtl ist das Problem doch heftiger, als ich gedacht hatte. Das ganze Programm ist ziemlich komplex.

              Comment


              • #8
                hmm, was bewirkt dieser befehl??
                Wie wäre es du schaust nach?

                Ich möchte nicht an der Datenbank herumpfuschen...
                Worauf wird der Befehl angewandt?

                Wie wäre es mit debuggen und schauen was der Befehl macht?

                und das Feld "Kennummer" enthält definitiv keine anderen Daten als ganze Zahlen.
                String str = test1.toString();

                Schon mal diesen Befehl angeschaut und debuggt?
                Christian

                Comment


                • #9
                  hi,

                  also ist echt nett von dir, dass du mir hilfst, aber ich glaube, du setzt hier zu viel Knowhow heraus. In Ich bin eher der Rookie. Bitte beachte das.

                  Ich kann zwar Java Programmieren, aber von debuggen und sonswas hab ich halt leider keine ahnung. Im Prinzip wurde ich hier ins kalte Wasser geschmissen. Die letzten Wochen konnte ich gut arbeiten, aber jetzt hänge ich eben.

                  Also weiter:
                  Mein Vorgänger hat im Programm einen Debugger eingebaut, der während das Programm läuft sein Zeugsl in die Konsole (bzw in ne Log) schreibt. Hier mal ein Ausschnitt:

                  [...]
                  letzterIndex:0
                  letzterDatenbankIndex:2
                  Rückgabewert:true
                  2009-06-17 14:26:44,352 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - getIndexRestriction() - end
                  Datenbank Verbindung getrennt
                  2009-06-17 14:26:48,024 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - mouseEntered(MouseEvent) - start
                  2009-06-17 14:26:48,024 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - mouseEntered(MouseEvent) - end
                  2009-06-17 14:26:48,118 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - mouseExited(MouseEvent) - start
                  2009-06-17 14:26:48,118 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - mouseExited(MouseEvent) - end
                  2009-06-17 14:26:49,930 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - mouseEntered(MouseEvent) - start
                  2009-06-17 14:26:49,930 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - mouseEntered(MouseEvent) - end
                  2009-06-17 14:26:50,008 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - mouseExited(MouseEvent) - start
                  2009-06-17 14:26:50,008 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - mouseExited(MouseEvent) - end
                  2009-06-17 14:27:01,540 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - actionPerformed(ActionEvent) - start
                  INSERT INTO Laeufer (Bla1, Bla2, bla3[...], Kennummer) VALUES ('1', 'test', 3 [...], 4269);
                  [4269]
                  2009-06-17 14:27:03,400 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - aktSearchTable(String) - start
                  2009-06-17 14:27:03,556 [AWT-EventQueue-0] DEBUG com.firma.OutputTableNew2 - aktSearchTable(String) - end
                  [...]

                  Wenn mir jemand erklären könnte, wie ich den debugger so benutze, dass ich herausfinden kann, wie die rot markierten Zahlenwerte entstehen (Kennummer ist klar..), wäre das schon die halbe Miete (denke ich )

                  Comment


                  • #10
                    Hallo,
                    hmm, was bewirkt dieser befehl??
                    Code:
                    str = str.replaceAll("[^0-9]", "");
                    ersetze alles was mit den Zahlen 0 bis 9 anfängt durch nichts

                    Das ganze Programm ist ziemlich komplex.
                    Das dürfte das Problem sein (neben den Formaten der Ein- und Ausgabewerte), aber zum Reinschauen gibt es u.a. das Openbook Java - Kapitel 23
                    MfG
                    Cheat-Sheets for Developers / Programming Quotes

                    Comment


                    • #11
                      stimmt nicht ganz

                      Hallo Markus und maddi,
                      Das folgende stimmmt nicht:
                      ersetze alles was mit den Zahlen 0 bis 9 anfängt durch nichts
                      Der von Christian angegebene Code
                      Code:
                      str.replaceAll("[^0-9]", "");
                      ließt sich als: Ersetze alles, was keine Zahl ist, durch nichts.
                      Das Dach innerhalb von eckigen Klammern (eine sog. Character Class) ist eine Negation. Nicht zu verwechseln mit dem Dach außerhalb, das den Anfang einer Zeile markiert.
                      Gruß ngomo
                      http://www.winfonet.eu

                      Comment


                      • #12
                        Wenn mir jemand erklären könnte, wie ich den debugger so benutze,
                        Hängt von deiner Umgebung ab
                        Christian

                        Comment


                        • #13
                          @Markus

                          ersetze alles was mit den Zahlen 0 bis 9 anfängt durch nichts
                          Was hätte das für einen Sinn???
                          Christian

                          Comment


                          • #14
                            Wie kann ich jetzt überprüfen, welche die letzte / größte Kennummer ist, damit ich bei einem neuen Datensatz Kennummer+1 machen kann
                            Um mal wieder zum Thema zu kommen: Das ganze ist eigentlich müßig, weil man so etwas nicht macht. Auch nicht in einer Übungsaufgabe.

                            Mit dieser Methode wirst Du in einem Multiusersystem zum einen doppelte Einträge haben, da uncomittete Änderungen noch nicht erfasst werden und zum anderen bringst Du unnötig Last auf das System. Jede Datenbank besitzt Mechanismen um fortlaufende Zahlen zu generieren (beachte, dass fortlaufend nicht heißt lückenlos, auch das ist theoretisch nur in einem strengen Singleusersystem möglich, und z.B. für technische Schlüssel auch überhaupt nicht nötig).

                            Also verwende die dafür vorgesehene Funktion deiner DB (z.B. AutoInc Felder in mysql, mssql oder Sequencen in Oracle oder ...) und dein problem lößt sich in Luft auf. Allerdings musst Du dich ein bissl mit deiner DB beschäftigen was aber sowieso sehr empfehlenswert ist.

                            Dim
                            Zitat Tom Kyte:
                            I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                            Comment

                            Working...
                            X