Abfrage-Ergebnisse in einem Fenster darstellen

Mrtwomoon

Mitglied
Hello zusammen,
ich bin Anfänger mit Java deshalb entschuldigen mich wegen dumme Fragen... 😉
Ich möchte folgendes machen:
1-) DB verbinden (gemacht)
2-) mit GUI ein Fenster machen (gemacht)
3-) im Fenster name eingeben und diese in DB suchen wenn existiert dann in ein Feld ausgeben!!!
hier wenn ich eine Name eingebe und wenn diese Name existiert (egal ein oder mehrere Einträge existiert gibt nur eine davon aus.)
??? Ich will aber alle Einträge ausgeben, die dieselbe Name haben??? 🙁

da unten steht mein Code 😳 ich bedanke mich für Hilfe


Java:
package de.degan.mysql;

import java.awt.event.*;
import java.sql.*;
import javax.swing.*;

public class SuchInDB extends JFrame {
	JTextField 	person_suchen;
	JButton     suchen_button;
	JLabel      suche_nach;
	JTextField  ergebnis_feld;
	/*-----------  DB Variablen --------------*/
	private static Connection conn = null;
	// Hostname
    private static String dbHost = "127.0.0.1";
    // Port -- Standard: 3306
    private static String dbPort = "3306";
    // Datenbankname
    private static String database = "person";
    // Datenbankuser
    private static String dbUser = "root";
    // Datenbankpasswort
    private static String dbPassword = "java";
    

	public SuchInDB(){
		this.getContentPane().setLayout(null);

		this.initWindow();
		
		try {		 
            // Datenbanktreiber für ODBC Schnittstellen laden.
            Class.forName("com.mysql.jdbc.Driver");
 
            // Verbindung zur ODBC-Datenbank 'person' herstellen.
            conn = DriverManager.getConnection("jdbc:mysql://"+dbHost+":"+dbPort+"/"
                                                              +database+"?"+"user="+dbUser+"&"
            		                                          +"password="+dbPassword);
        } catch (ClassNotFoundException e) {
            System.out.println("Treiber nicht gefunden");
        } catch (SQLException e) {
            System.out.println("Connect nicht moeglich");
        }
	}
	
	private static Connection getInstance()
    {
        if(conn == null)
            new SuchInDB();
        return conn;
    }
	
	protected void initWindow() {
	    //elemente instanzieren 
	    person_suchen = new JTextField();
	    suchen_button = new JButton("Suchen");
	    suche_nach    = new JLabel("suche nach:");
	    ergebnis_feld = new JTextField();
	    
	    // Position festlegen in Layout
	    suche_nach.setBounds(5, 10, 100, 20);
	    person_suchen.setBounds(100, 10, 300, 20);
	    suchen_button.setBounds(410, 10, 90, 20);
	    ergebnis_feld.setBounds(5, 40, 535, 245);
	    
	    // in Layout hinzufügen
	    this.getContentPane().add(person_suchen);
	    this.getContentPane().add(suchen_button);
	    this.getContentPane().add(suche_nach);
	    this.getContentPane().add(ergebnis_feld);
	    
	    
	    // button suchen Der ActionListener ist dafür zuständig sog. ActionEvents zu empfangen
	    suchen_button.addActionListener(new ActionListener(){
	    	
	    	public void actionPerformed (ActionEvent arg0){
	    		buttonBerechneClicked();
	    	}
	    });
	    
	    
	}
	public void buttonBerechneClicked(){
		conn = getInstance();
		// Anfrage-Statement erzeugen.
		Statement query;
		try {
            query = conn.createStatement();
            
		    String name =person_suchen.getText();
		    String sql ="SELECT * FROM student WHERE Vorname = '"+name + "' OR Nachname='"+name+"'";
		    
		    ResultSet result= query.executeQuery(sql);
		//    if (result==null){                       //TODO: gib aus wenn keinen Eintrag trifft
		 //   	ergebnis_feld.setText("diese Eintrag existiert in DB nicht...");
		  //  }else{
		    while (result.next()) {
              String first_name = result.getString("Vorname"); // Alternativ: result.getString(1);
              String last_name  = result.getString("Nachname"); // Alternativ: result.getString(2);
              String name_result = last_name + ", " + first_name;
            //  schreibInErgebnis(name);
		        ergebnis_feld.setText(name_result); 
            }
		   // } //else 
		} catch (SQLException e) {
            e.printStackTrace();
        }
		 
	}
	
	/*public void schreibInErgebnis(String text){		
           // System.out.println(name);
           ergebnis_feld.setText(text); 
	}*/
	
}
 
erst danke für das schnellere Antwort
das habe ich jetzt gemacht aber immer noch ist gleich

JTextArea ergebnis_feld;
ergebnis_feld = new JTextArea();
 
Zuletzt bearbeitet:
Mit ergebnis_feld.setText(name_result) überschreibst du ja den vorherigen Eintrag.
Versuch statt dessen mal das hier ergebnis_feld.setText(name_result+", "+ergebnis_feld.getText());
 
sory! dass ich nicht antworten könnte 😉

danke für die Antworten... :toll:

jetzt muss ich aber vorherige Suchergebnisse löschen können, da die neue Ergebnisse unter den alten hinzugefügt werden... :noe:
also ich will nach jeder neuen Suche in der Feld nur die aktuelle Ergebnisse haben...
was soll ich jetzt machen?
 
Du nutzt ja ein JTextArea so wie ich das mitbekommen habe oder?

Und du speicherst den Inhalt in einer Variablen, die ständig erweitert wird.

Nun da kannst du einfach in den Listener von deinem suchen Button den Inhalt von dem String auf "" setzen.
 
Du machst ja sowas in der Art hier:

Java:
ergebnis_feld.setText(name_result);

Und wenn du nun die Variable
Code:
name_result
leerst.

Java:
name_result = "";

// Variable wieder übergeben.

ergebnis_feld.setText(name_result);

Dann hast du wieder ein leeres TextArea.
 

Zurück
Oben