# Datenbankauswahl



## JonnieWalker (1. Apr 2010)

Hallo Leute hab mal ne Frage.
Ich hab so ein Button in meinem Fenster der heisst Datenbank Auswahl.
Wenn ich drauf klicke öffnet sich ein neues Fenster
Dort kann ich mein Datenbanknamen eingeben und mich mit der Datenbank konnektieren.
Den Datenbank namen zu übergeben hab ich dynamisch gemacht, d.h er kontrolliert selber ob 
es diese Datenbank überhaupt gibt und wenn nicht dann gibt er mir die Fehlermeldung[Datenbank existiert nicht].

Wenn ich jetzt eine JComboBox nehme mit NetBeans will ich das so ändern, das ich auf diese JComboBoc klicke und er mir alle vorhandenen Datenbanken anzeigt, dann wähl ich eine an und verbinde mich mit der Datenbank.

Wie geht das?
Hier der aktuelle Code nochmal mit dem dynamischen Verbindungsstring:


```
public void Datenbankauswahl() {
        Component KeineDb = null;
        String holeVerbindung = DbAuswahl.tfDatenbank.getText();
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
            v2 = DriverManager.getConnection("jdbc:odbc:"+holeVerbindung); //String zu Datenbank  
            System.out.println("Verbindung zum Treiber/ Datenbank erfolgreich hergestellt");

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(KeineDb, "Datenbank nicht vorhanden");
            DbAuswahl dbAuswahl = new DbAuswahl();
            dbAuswahl.setVisible(true);
        }
      }
```


----------



## JonnieWalker (1. Apr 2010)

Ich muss doch nur die Zeile 6 verändern 
	
	
	
	





```
v2 = DriverManager.getConnection("jdbc:odbc:"+holeVerbindung);
```
Hier muss doch nach jdbcdbc:[sqlserver] so ungefähr ne????
wie mach ich das??? bin ich auf dem richtigen Weg?


----------



## crackm (1. Apr 2010)

Grundsätzlich würde ich dir raten ertsmal eine liste von Datenbanken vom server zu fordern. Ich poste ein einfaches Beispiel drunter.

```
import java.sql.*;
public class MySqlLoadDriver {
  public static void main(String [] args) {
    Connection con = null;
    ResultSet rs = null;
    Statement st = null;
    try {
      Class.forName("com.mysql.jdbc.Driver") ;
      System.out.println("MySQL JDBC driver loaded ok.");
      con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/?" + "user=_user_&password=_password_"); // hier ändern user und co :)
      st = con.createStatement();
      st.execute("SHOW DATABASES");
      rs = st.getResultSet();
      show(rs);
    } catch (Exception e) {
      System.err.println("Exception: "+e.getMessage());
    }
  }
   public static void show (ResultSet rs)
  {
  try{
      while (rs.next()){
         System.out.println(rs.getString(1));
     }
   }catch (Exception ex){
     System.err.println("Error: " + ex.getMessage());
   }
  }
}
```
Falls du eine Verbindung schon hast, was ich deinen Worten entnehme musst du die nicht nochmal aufbauen, sondern kannst es ja übergeben  .


----------



## JonnieWalker (1. Apr 2010)

hmm hat jemand vllt noch ein etwas anderes beispiel????


----------



## crackm (1. Apr 2010)

Was genau klappt den jetzt nicht bei dir einweig Information wäre hilfreich um zu helfen.


----------



## JonnieWalker (1. Apr 2010)

also meine datenbank klasse sieht so aus
ich habe eine verbindung und eine zweite guck mal und da mus sich jetzt noch das von dir einbauen aber kp wie :S:S:S:


```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package darstellungpflichth;

import java.awt.Component;

import java.sql.*;
import java.util.ArrayList;

import javax.swing.JOptionPane;


public class Datenbank {
     private String Server;

    Connection v;
    Connection v2;
    ArrayList<Words> retWords = new ArrayList<Words>();
    

    public Datenbank(){
        
    }
    public void Verbindung(){
         try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            v = DriverManager.getConnection("jdbc:odbc:MELOFT");
            System.out.println("Verbindung zum Treiber/ Datenbank erfolgreich hergestellt");

        } catch (Exception ex) {
            System.out.println("Der Treiber oder Datenbank konnte nicht gefunden werden");
        }

    }


    public void Datenbankauswahl() {
        Component KeineDb = null;
        String holeVerbindung = DbAuswahl.jComboDatenbank.getName();
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            v2 = DriverManager.getConnection("jdbc:odbc"+ holeVerbindung);
            System.out.println("Verbindung zum Treiber/ Datenbank erfolgreich hergestellt");

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(KeineDb, "Datenbank nicht vorhanden");
            DbAuswahl dbAuswahl = new DbAuswahl();
            dbAuswahl.setVisible(true);
        }
        getWords();
        getWords2();
      
    }

    public Benutzer holeBenutzer(String Passwort, String Benutzername) {
        Benutzer Ergebnis = null;
        Statement Befehl = null;
        ResultSet Daten;
        try {
            Befehl = v.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            String sql = "select * from benutzer ";
            if (Passwort.isEmpty()) {
                sql += "where passwort = '" + Passwort + "' ";
            }
            if (Benutzername.isEmpty()) {
                sql += "where benutzername = '" + Benutzername + "' ";
            } else {
                sql += "where passwort = '" + Passwort + "' ";
                sql += "and benutzername = '" + Benutzername + "' ";
            }
            Daten = Befehl.executeQuery(sql);
            if (Daten.isBeforeFirst()) {
                Daten.first();
            }
            Ergebnis = new Benutzer(Daten.getInt("benutzerID"), Daten.getString("passwort"),
                    Daten.getString("benutzername"));
        } catch (Exception err) {
            System.out.println(err);
        }

        return Ergebnis;
    }

    public ArrayList<Words> getWords() {
        Words Datensatz;
        ResultSet daten;

        try {
            Statement anweisung = v2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            daten = anweisung.executeQuery("SELECT wordID, word from words");
            while (daten.next()) {
                Datensatz = new Words(
                        daten.getString("word"));
                retWords.add(Datensatz);
            }
        } catch (Exception ex) {
        }
        return retWords;

    }

  
    public void schreibeBenutzer(String benutzername, String passwort) {
        try {
            String sql = null;

            sql = "insert into benutzer(benutzername, passwort) values (?,?)";
            PreparedStatement befehl = v.prepareStatement(sql);
            befehl.setString(1, benutzername);
            befehl.setString(2, passwort);
            befehl.execute();
            befehl.close();

        } catch (Exception ex) {
        }
    }

    public void schreibeWort(String word) {
        try {
            String sql = null;
            sql = "insert into swords(word) values (?)";
            PreparedStatement befehl = v2.prepareStatement(sql);
            befehl.setString(1, word);
            befehl.execute();
            befehl.close();
        } catch (Exception ex) {
        }
    }

    
}
```


----------



## JonnieWalker (1. Apr 2010)

In der Methode public void Datenbankauswahl() will ich das so machen und dann geh ich auf das fenster DBAuswahl und
will die kombobox anklicken und die datenbanken sehen:S
eine anwählen und ab gehts!


----------



## crackm (1. Apr 2010)

Ich sehe zwar keinen Grund zwei Verbindungen aufzubauen aber seis drum.
Als als erstes muss du dich entscheiden, wie du die Funktion am besten aufteils, denn das ausgeben einer Datenbankenliste und das öffnen einer bestimmten lässt sich nur schwer mit einer Funktion realisieren.
Zum realisieren der DB-Auflistung kannst du einen einfache Funktion basteln, die als Rückgabewert einen Array von Strings zurück gibt. Diesen Array benutzt du um den GUI-Element aufzubauen vermustlich ein Dropdown-menu.(Da ich die main-Methode bei dir nicht sehe weiß ich nicht wie du das aufbaust). Die verbindung kannst du hiernach auch schließen, denn diese wird nicht mehr gebraucht.
Als nächstes brauchst du eine Funktion die db tatsächlich auswählt, dies kannst du entweder duch das aufbauen einer Verbindung erreichen:

```
conn = DriverManager.getConnection("jdbc:mysql://"+server+"/"+db+"?" + "user="+user+"&password="+password);
```
oder durch das auswählen der DB SQL-Seitig mit dem Query 
	
	
	
	





```
st.execute("USE " +db+ ";");
```
Bei der zweiten Möglichkeit kannst du eine beliebige Verbindung benutzen, die bereits besteht.


----------

