MySQL Eine Art Sverweis

Gute Morgen Leute,

ich wollte mal Nachfrage ob es mit Mysql und Java möglich ist eine art Sverweis einzubauen.?
Es geht darum das ich in meiner Tabelle(in der Datenbank) Artikelnummer, Artikelbezeichnung,Menge, Lagerort und Bemerkung drin stehen habe. Wenn ich nun im meinem Programm im textfield die nummer eingeben soll automatich nur die Bezeichnung ins nächste textfield geschrieben werden.
Ich hab das schon gegooglte aber ich finde nicht die passende lösung wie ich das schreiben muss.
SELECT
<Spaltenindex>
FROM
<Tabelle>
WHERE
<Matrix> = <Suchkritreium>;
das funktioniert nicht...

Ich wäre für eure Hilfe sehr dankbar =)
 
Moin,

zuerst einmal, die Tasten mit '.', ',' oder auch ';' sind nicht zum Spaß auf der Tastatur !!

ich wollte mal Nachfrage ob es mit Mysql und Java möglich ist eine art Sverweis einzubauen.?
Was meinst Du genau?
Die gleichnamige Funktion aus EXCEL??

Es geht darum das ich in meiner Tabelle(in der Datenbank) Artikelnummer, Artikelbezeichnung,Menge, Lagerort und Bemerkung drin stehen habe. Wenn ich nun im meinem Programm im textfield die nummer eingeben soll automatich nur die Bezeichnung ins nächste textfield geschrieben werden.
Ich hab das schon gegooglte aber ich finde nicht die passende lösung wie ich das schreiben muss.
Java:
SELECT
    <Spaltenindex>
FROM
    <Tabelle>
WHERE
    <Matrix> = <Suchkriterium>;
das funktioniert nicht...
Mal ganz davon abgesehen, das "funktioniert nicht" keine Fehlerberschreibung ist ... hast Du das etwa genau SO eingegeben??

Wenn die Artikelnummer eingegeben wird, holst Du damit den zugehörigen Datensatz; etwa so (PseudoCode):
Code:
select * from MEINE_TABELLE where artikelnummer = MEINE_ARTIKELNUMMER
Aus dem resultset kannst Du dann die Artikelbezeichnung nehmen und auf ein Label oder Textfeld schreiben (Stichwort hier: setText(...))

Gruß Klaus
 
Tut mir leid, die erklärung war wirklich nicht sonderlich gut😕
Also ich versuche in meine Textfield "Artikelnummer" die Nummer einzugeben und mit Enter zu bestätigen. Dadurch soll dann die passende Artikelbezeichnung im Textfield "Artikelbezeichnung" angezeigt werden. Bis jetzt sieht das so aus :
Java:
tfArtikelNr1 = new JTextField();
     tfArtikelNr1.setFont(new Font("Tahoma", Font.PLAIN, 25));
     tfArtikelNr1.addKeyListener(new KeyAdapter() {
       @Override
       public void keyPressed(KeyEvent ArtikelNr1) {
         if(ArtikelNr1.getKeyCode()==KeyEvent.VK_ENTER)
             try {
             
               String query="select * from HalleAchtListe where Artikelnummer = Artikelnummer" ;
               PreparedStatement pst=connection.prepareStatement(query);
               ResultSet rs=pst.executeQuery();
              
               pst.close();
             }catch(Exception ex){
               ex.printStackTrace();
             }
           }
       });

Es funktioniert natürlich nicht. Ich weiß leider auch nicht, den passenden Code der dazu passt. 😳
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Links 🙂

Ich hab das nun so gemacht, nur leider kommt kommt dadurch nur eine Fehlermeldung
Java:
String query="select * from HalleAchtListe where Artikelnummer = Artikelbezeichnung" ;
               Statement stmt = null;
               ResultSet rs = stmt.executeQuery(query);
               tfArtikelBez1.setText(query);
😕

Bekomme das nicht hin, das er durch die Artikelnummer automatisch die Artikelbezeichnung hinschreibt..😵
 
Danke für die Links 🙂
Hast Du sie denn auch gelesen ??? 🙄
Dort ist doch genau beschrieben, wie Du einzelne Werte aus dem resultSet holst ...

Ich hab das nun so gemacht, nur leider kommt kommt dadurch nur eine Fehlermeldung
Aha ... und WELCHE??
Verrätst Du das auch?

Java:
String query="select * from HalleAchtListe where Artikelnummer = Artikelbezeichnung" ;
               Statement stmt = null;
               ResultSet rs = stmt.executeQuery(query);
               tfArtikelBez1.setText(query);
Warum schreibst Du den Query-String ins Textfeld ???

Gruß Klaus
 
Hallo,

vielleicht solltest du nicht zwei Dinge gleichzeitig ausprobieren:
1. das Abfragen von Datenbanken,
2. das Erstellen von Oberflächen.
Beides für sich ist schon schwer genug!

Einen Fehler sehe ich sofort: stmt ist null, deshalb darfst du dafür keine Methode aufrufen.

Gruß
Fritz
 
@VfL_Freak
Query steht dort weil Eclipse das automatisch eingefügt hat. Habe ich aber gerade gemerkt das, dass kein Sinn macht 😀
@fhoffmann Aber ich brauche doch beides dafür(oder ich verstehe dich falsch )

Ich hab mir den ersten Link nochmal genauer angeguckt und hab das etwas umgewandelt

Java:
tfArtikelNr1 = new JTextField();
     tfArtikelNr1.setFont(new Font("Tahoma", Font.PLAIN, 25));
     tfArtikelNr1.addKeyListener(new KeyAdapter() {
       @Override
       public void keyPressed(KeyEvent ArtikelNr1) {
         if(ArtikelNr1.getKeyCode()==KeyEvent.VK_ENTER)
             try {
               
               
               
               Statement stmt = connection.createStatement();
               String query = "select * from HalleAchtListe where Artikelnummer = Artikelbezeichnung";
               ResultSet rs = stmt.executeQuery(query);
             
               tfArtikelBez1.setText(rs.getString("Artikelnummer"));

               
             }catch(Exception ex){
               ex.printStackTrace();
             }
           }
           
           
           
       });

Durch die Eingabe im Textfield tfArtikelNr1 soll die Artikelnummer eingegeben werden. Und durch die Taste Enter, die Artikelbezeichnung im Textfield tfArtikelBez1 eingetragen werden. Dennoch bekomme ich nur eine fehlermeldung
java.sql.SQLException: Illegal operation on empty result set.
 
Zuletzt bearbeitet:
Mehrere Anmerkungen von mir:
1. Select * ist keine gute Idee.
2. Woher weiß der SQL Query nach was es suchen soll? Ist der Inhalt vom Textfeld gleich der "Artikelbezeichnung" in der Query?
3. Funktioniert das Query ohne Java?
4. Bist du evtl. mit den Feldnamen (Artikelnummer / Artikelbezeichnung) durcheinander? Du fragst nach der Artikelnummer und willst due Artikelbezeichnung.
 
vielleicht solltest du nicht zwei Dinge gleichzeitig ausprobieren:
1. das Abfragen von Datenbanken,
2. das Erstellen von Oberflächen.
Beides für sich ist schon schwer genug!

Das solltest du dir zu Herzen nehmen.

Sicherlich brauchst du beides für dein Vorhaben. Aber du solltest vielleicht doch besser eins nach dem anderen lernen.

Code:
String query = "select * from HalleAchtListe where Artikelnummer = Artikelbezeichnung";

Bei dem Query solltest du dich jedenfalls nicht wundern, wenn du immer ein leeres Ergebnis zurückgeliefert bekommst. Damit fragst du mit sehr großer Wahrscheinlichkeit nicht das ab, was du eigentlich möchtest.
Mal ganz davon abgesehen, dass der Code für die Kommunikation mit der Datenbank nichts int der GUI verloren hat.

Zusammengefasst:
Du hast keine Ahnung von OOP.
Du hast keine Ahnung von GUI Entwicklung
Du hast keine Ahnung von relationalen Datenbanken.

Aber jetzt willst du alles gleichzeitig anwenden. Das ist zum Scheitern verurteilt.

Ich hoffe einfach mal darauf, dass du das nicht auf den Schlips getreten fühlst, sondern verstehst, was damit gemeint ist.
 
@VfL_Freak also was der fehler nun bedeutet weiß ich. Select liefert nichts zurück.
@ Dunkel wenn SELECT * keiner gute Idee ist, was soll ich denn nehmen? muss ich genauer werden?
Ich versuche durch die Eingabe im Textfield(tfArtikelNr1) automatisch die Artikelbezeichnung zu bekommen im (tfArtikelBez).
@Stq Ne, ne alles gut, hast ja auch recht damit. Ich muss noch viel lernen, aber das meiste kommt erst wenn man an etwas arbeitet und da bin ich gerade bei. Leider komme ich im Moment gar nicht weiter und ich denke auch, das ich mit meiner momentanen programmierung total falsch liege.
 
Moin,

oops, das sehe ich ja jetzt erst .... 😱
Java:
String query = "select * from HalleAchtListe where Artikelnummer = Artikelbezeichnung";
Schau Dir mal genau Deine Bedingung in der WHERE-Klausel an!
Fällt Dir auch was auf ?? 😉

Gruß Klaus
 
Moin,
@VfL_Freak Artikelnummer statt bezeichnung? Verstehen ich nicht was falsch ist😕
in welchen Fall sollte denn in der Datenbank Artikelnummer und Artikelbezeichnung gleich sein ??? 😕
Du brauchst in etwas sowas:
Java:
"select * from HalleAchtListe where Artikelnummer = GESUCHTE_ARTIKELNUMMER";
oder gleich
Java:
"select Artikelbezeichnung from HalleAchtListe where Artikelnummer = GESUCHTE_ARTIKELNUMMER";

Gruß Kalus
 
in welchen Fall sollte denn in der Datenbank Artikelnummer und Artikelbezeichnung
Anders gefragt: Wieviele Artikel gibt es wohl in der db, bei denen die Artikelnummer nicht "1", "00001", "1A" oder "AXYZ-001" ist, sondern "Artikelbezeichnung"?
@TE: mit deiner Query suchst du nach einem Artikel mit der Artikelnummer "Artikelbezeichnung". Das kann offensichtlich nicht funktionieren. Du möchtest offensichtlich den/die Artikel finden, bei denen die Artikelnummer gleich dem Inhalt des JTextFields "tfArtikelNr1" ist. Ich nehme mal an, dass Artikelnummer eine Spalte mit einem numerischen Datentyp ist.
Variante 1: Du holtst den Text aus tfArtikelNr1, und baust damit deine Query:
Java:
String query = "select Artikelbezeichnung from HalleAchtListe where Artikelnummer = "+tfArtikelNr1.getText();
Variante 2: Du erstellst ein PreparedStatement, und parametrisierst dieses
Java:
String query = "select Artikelbezeichnung from HalleAchtListe where Artikelnummer = ?";
PreparedStatement pst = connection.createStatement(query);
pst.setInt(1,Integer.parseInt(tfArtikelNr1.getText()));
ResultSet rs = pst.executeQuery();
In beiden Fällen steht im select nur die Spalte, an der du auch interessiert bist. Wenn du sinnlosen Traffic erzeugen möchtest, kannst du auch gerne beim select * bleiben.
Der Vorteil von Variante 2 ist, dass keine SQL Injection möglich ist, und dass der Code einen leicht erkennbaren Fehler liefert, anstatt einfach nur ein leeres ResultSet zurückzugeben.
Empfohlene Seite, um mit SQL statements etwas zu spielen:http://www.w3schools.com/sql/
 
Ja ich hätte noch eine Frage.

Ich habe das hinbekommen, das wenn ich die Artikelnummer eingebe die dazugehörige Bezeichnung in der Tabelle angezeigt wird, das klappt. Nur möchte ich das Ergebniss nicht in der Tabelle stehen haben sondern in dem Textfield ArtikelBez1. Ich weiß nur nicht wie der Code lautet.

Java:
tfArtikelNr1 = new JTextField();
     tfArtikelNr1.setFont(new Font("Tahoma", Font.PLAIN, 25));
     tfArtikelNr1.addKeyListener(new KeyAdapter() {
       @Override
       public void keyPressed(KeyEvent ArtikelNr1) {
         if(ArtikelNr1.getKeyCode()==KeyEvent.VK_ENTER)
             try {
               
               
               String query = "select Artikelbezeichnung from HalleAchtListe where Artikelnummer = ?";
               PreparedStatement pst = connection.prepareStatement(query);
               pst.setString(1, tfArtikelNr1.getText());
               //pst.setInt(1,Integer.parseInt(tfArtikelBez1.getText()));
               ResultSet rs = pst.executeQuery();
               tableHalleAcht.setModel(DbUtils.resultSetToTableModel(rs));
               
             }catch(Exception ex){
               ex.printStackTrace();
             }
           }
           
           
           
       });
Bis jetzt sieht es so aus.

Hat jemand eine Idee?
 
tfArtikelBez1.setText hab ich schon versucht, aber er will ja ein String in den klammern haben. und resultSet also rs fuktioniert nicht, da makiert mir Eclipse gleich alles rot.
 
@Joose Danke für die Seite, ich muss aber zugeben das ich auf der Seite nur die hälfte verstehe.
Liegt es denn wirklich daran das meine ResultSet rs = pst.executeQuery(); falsch ist ? Weil in der Tabelle wird das richtig ausgegeben ich bekomme das nur nicht in mein Textfield.
 
@JStein52 Das hatte ich schon versucht, dann kommt der Fehler : Before start of result set.
Also ich versuche das wenn ich die Artikelnummer eingebe, das es automatisch aus der Datenbank genommen wird und die passende Artikelbezeichnung eingetragen wird, in das Textfield. Ich hab das hinbekommen das es in der Tabelle angezeigt wird. Aber nicht im Textfield.

So sieht das jetzt aus.



Java:
tfArtikelNr1 = new JTextField();
     tfArtikelNr1.setFont(new Font("Tahoma", Font.PLAIN, 25));
     tfArtikelNr1.addKeyListener(new KeyAdapter() {
       @Override
       public void keyPressed(KeyEvent ArtikelNr1) {
         if(ArtikelNr1.getKeyCode()==KeyEvent.VK_ENTER)
             try {
               
             
           
               
               
               String query = "select Artikelbezeichnung from HalleAchtListe where Artikelnummer = ? ";
               PreparedStatement pst = connection.prepareStatement(query);
               pst.setString(1, tfArtikelNr1.getText());
               ResultSet rs = pst.executeQuery();
               
               //tableHalleAcht.setModel(DbUtils.resultSetToTableModel(rs));
               //tfArtikelBez1.setText(rs.getString(2));
               tfArtikelBez1.setText(rs.getString("Artikelbezeichnung"));
               
             }catch(Exception ex){
               ex.printStackTrace();
             }
           }
!
 
Es geht danke Leute, ihr seid die besten !!!!🙂🙂

hier die Lösung:

Java:
tfArtikelNr1 = new JTextField();
     tfArtikelNr1.setFont(new Font("Tahoma", Font.PLAIN, 25));
     tfArtikelNr1.addKeyListener(new KeyAdapter() {
       @Override
       public void keyPressed(KeyEvent ArtikelNr1) {
         if(ArtikelNr1.getKeyCode()==KeyEvent.VK_ENTER)
             try {
               
             
           
               
               
               String query = "select Artikelbezeichnung from HalleAchtListe where Artikelnummer = ?";
               PreparedStatement pst = connection.prepareStatement(query);
               pst.setString(1, tfArtikelNr1.getText());
               ResultSet rs = pst.executeQuery();
               
             
               while( rs.next())
               tfArtikelBez1.setText(rs.getString("Artikelbezeichnung"));
               
               
             }catch(Exception ex){
               ex.printStackTrace();
             }
           }
           
           
           
       });


Danke Danke !!! 🙂🙂
 

Neue Themen


Zurück
Oben