# Problem bei einfacher Datenbankabfrage



## maxth (2. Sep 2009)

Hallo Leute, 

ich hab ein Problem bei einer einfachen Datenbankabfrage. 

Ich hab eine Verbindungsklasse, in der meine Verbdinungseigenschaften sind und Methoden für verbinden, trennen, ergebnisse der abfragen und update bei Änderungen. 


```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Verbindung {
	public static Connection con;
	
	public static Statement statement;
	
	public static ResultSet rs;
	
	private static final String className="com.mysql.jdbc.Driver";
	private static final String DB_URL= "jdbc:mysql://localhost/mkb";
	private static final String DB_USER = "root";
	private static final String DB_PASSWD = "";
	
	public void verbinden(){
		try{
			Class.forName(className);
		} catch (ClassNotFoundException e){
			System.out.println("JDBC driver not found.");
		}
		try{
			con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWD);
		} catch(SQLException e){
			System.out.println("Error establishing connection: " + e.getMessage());
		}
	}
	
	public void trennen(){
		try{
			statement.close();
			con.close();
		}catch (SQLException e){
			System.out.println("ERROR closing connection: " + e.getMessage());
		}
	}
	
	public ResultSet execSql(String sql){
		try {
			statement = con.createStatement();
			ResultSet resultSet = statement.executeQuery(sql);
			return resultSet;
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		return null;
	}
	
	public void update(String sql){
		try {
			statement = con.createStatement();
			statement.executeUpdate(sql);
			statement.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}
```

so...jetzt will ich diese Klasse verwenden, ich hab mir eine kleine gui gebaut, der mir auf knopfdruck ergebnisse anzeigt. Nur irgendwie kommt bei mir nichts?!???:L

Vielleicht könnt ihr mir helfen, hier ist mein code!


```
import java.awt.*;
import java.awt.event.*;
 
import javax.swing.*;
 
public class Abfrage extends JFrame {
    
    String s;
    
    Verbindung vb = new Verbindung();
    
  

    
    private JButton saveButton;
    
    public Abfrage() {
    	super("DB Abfrage");
        this.setLayout(new GridLayout(3, 1));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(0, 0, 300, 200);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setLocationRelativeTo(null);
        
        vb.verbinden();
        
        
        
        
        saveButton = new JButton("DB Abfrage");
        saveButton.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	 
             s = "SELECT * FROM Vermieter";
             vb.execSql(s);
               
                
            }
        });
        
  
        this.getContentPane().add(saveButton);
    }
 
    public static void main(String[] args) {
        new Abfrage().setVisible(true);
    }
}
```

Kann mir auch jemand sagen wie ich die ergebnisse auf der konsole ausgeben kann.

vielen Dank


----------



## SlaterB (2. Sep 2009)

etwas in der Richtung von

```
ResultSet r =  vb.execSql(s);
System.out.println("ResultSet ist da");
while(r.next()) {
  System.out.println(r.getString(1));
}
```
steht sowas nicht in einem Tutorial bereits bei 'wie schreibe ich die erste allerkleinste DB-Anfrage'?


----------



## maxth (2. Sep 2009)

ja okay, steht auch drin, hab ich auch schon hinbekommen, nur ich bekomme es auf diese Art und weise nicht hin. 

Okay, hat jetzt soweit funktioniert, vielen Dank.


----------



## SlaterB (2. Sep 2009)

"zuweisung auf die Klasse", "Resultset ein Teil der Verbindungsklasse" sagt mir leider im Moment nix,

aktueller Code + vollständige Fehlermeldungen könnten helfen,
sonst bitte neu formulieren 

edit: inzwischen hast du dein Posting editiert, viel mehr kann ich aber auf 'ich habe irgendeinen Fehler' auch nicht antworten


----------



## maxth (2. Sep 2009)

Ja...okay hab es hinbekommen, 

ich musste nur Resultset importieren, und um die while ein Try / catch setzen, und dann kamen schon die ergebnisse. 

Vielen Dank, meist reicht eigentlich selber nach denken!


----------



## maxth (2. Sep 2009)

so, ich bin leider noch nicht der erfahrenste Entwickler. 

Jetzt hab ich noch mal eine Frage, ich möchte ein Programmschreiben nach dem MVC Konzept. die GUI habe ich hier in dieser klasse nur zum TEst, in der fertigen version soll diese Klasse eine Model Klasse werden. Was wäre nach deiner bzw. eurer Meinung die beste Art die Werte aus der Datenbank abzuspeichern. Mit Arrays habe ich schon gearbeitet tue mich aber noch ein bisschen schwer damit. 

Könnt ihr mir vielleicht einen tipp geben?


----------



## SlaterB (2. Sep 2009)

zweidimensional Arrays sind ok,
noch besser wäre, wenn du für Vermieter eine eigene Klasse hättest, 
und dann nur noch eine Liste/ ein Array von Vermieter-Objekten


----------



## maxth (2. Sep 2009)

Ja okay, ich wollte sowieso eine Vermieter Klasse machen.

 Also wäre dies besser zu Realisieren mit einer Arraylist. Und alle Einträger der Datenbanktabelle einfach in der Liste zu adden.


----------

