Datenbankauswahl

JonnieWalker

Bekanntes Mitglied
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:

Java:
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

Bekanntes Mitglied
Ich muss doch nur die Zeile 6 verändern
Java:
v2 = DriverManager.getConnection("jdbc:odbc:"+holeVerbindung);
Hier muss doch nach jdbc:eek:dbc:[sqlserver] so ungefähr ne????
wie mach ich das??? bin ich auf dem richtigen Weg?
 

crackm

Mitglied
Grundsätzlich würde ich dir raten ertsmal eine liste von Datenbanken vom server zu fordern. Ich poste ein einfaches Beispiel drunter.
Java:
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

Bekanntes Mitglied
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:

Java:
/*
 * 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

Bekanntes Mitglied
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

Mitglied
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:
Java:
 conn = DriverManager.getConnection("jdbc:mysql://"+server+"/"+db+"?" + "user="+user+"&password="+password);
oder durch das auswählen der DB SQL-Seitig mit dem Query
Java:
st.execute("USE " +db+ ";");
Bei der zweiten Möglichkeit kannst du eine beliebige Verbindung benutzen, die bereits besteht.
 

Neue Themen


Oben