Announcement

Collapse
No announcement yet.

Zugriff auf Access

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf Access

    Das folgende Programm baut eine Verbindung zu der Access-<br>Datenbank "SQLTest" auf. Das Problem an der ganzen Sache ist die<br> letzte IF-Anweisung. Für den Fall, dass das Programm keinen entsprechenden <br>Eintrag in der Datenbank findet, soll es den Satz "Kein entsprechender <br>Eintrag gefunden" ausgeben. Wenn man nun einen vorhandenen Namen <br>eingibt, zeigt das Prog ganz korrekt den entsprechenden Datensatz an. <br>Wenn man nun allerdings den Namen eines nicht vorhandenen Eintrages angibt, zeigt das Programm nicht die entsprechende Fehlermeldung. Doch nun das beste: <br>
    In der Datenbank ist ein Eintrag mit dem Titel "MCSE" vorhanden. Wenn man<br> nach diesem Titel sucht, wird der Datensatz korrekt angezeigt. <br>Wenn man nun aber nach "mcse" (also alles Kleinbuchstaben) sucht, <br>kommt auf einmal die entsprechende Fehlermeldung. Hat jemand eine <br>Erklärung dazu? Hier der Quellcode:<br>
    <br>

    <pre>
    void accessDatabase()
    {
    Connection con;
    Statement state;
    ResultSet result;
    String url = "jdbcdbc:SQLTest";
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    try{
    Class.forName(driver);
    }
    catch (Exception e) {area.setText("Fehler beim Laden des Datenbank-Treibers");}

    try{
    con = DriverManager.getConnection(url);
    state = con.createStatement();
    String se = tf.getText();
    String sql = "SELECT * FROM ISBN WHERE TITEL='"+se+"'";
    result = state.executeQuery(sql);

    area.setText("");

    while(result.next())
    {
    String e1 = result.getString(1);
    String e2 = result.getString(2);
    String e3 = result.getString(3);
    String e4 = result.getString(4);

    if (e2.equals(se))
    {
    area.setText("ISBN-Nr. TITEL\n");
    area.append(e1 +" "+e2 +" "+e3+" "+e4+"\n");
    }
    else
    {
    area.setText("Kein entsprechender Datensatz gefunden.");
    break;
    }
    }
    }
    catch (Exception e) {area.setText("Fehler beim Zugriff auf Datenbank");}
    }
    </pre>

  • #2
    Hallo Kevin,

    die meisten Datenbanken unterscheiden zwischen Gross- und Kleinschreibung.
    Daher müsste dein SQL-Statement abgeändert werden:
    <pre>
    "SELECT * FROM ISBN WHERE LOWER(TITEL)='"+se.toLowerCaser()+"'"
    ^^^^^^Datenbankabhängig
    </pre>
    aber Achtung: diese Operation ist sehr teuer, da kein Index verwendet wird (meistens).

    Für die Ausgabe würde ich als erstes abfragen, ob überhaupt ein Titel gefunden wurde und die Abfrage aus der while-Schleife herraus nehmen, da du schon im SQL-Statement nach genau diesen Titel suchst.
    ich würde vorschlagen:
    <pre>
    ...
    if(result.next()){
    do{
    //Ausgabe
    }while(result.next())
    }else{
    //Meldung: kein Titel gefunden
    }
    </pre&gt

    Comment


    • #3
      Super, dank Dir.<br>
      Jetzt funktioniert es. Übrigens unterscheidet Access nicht zwischen<br> Gross- und Kleinschreibung

      Comment


      • #4
        Ist Access eine Datenbank ;-)

        Comment

        Working...
        X