Erste Schritte Generics von Profis leicht erklärt

Dimax

Top Contributor
Guten Tag, ich bin Java Anfänger und lerne gerade Generic class,
Ich habe folgende Klasse erstellt ,und leider habe einige Fehlermeldungen bekommen.
Kann mir jemand erklären wo meine Fehler sind und wie ich diese beheben könnte.
Danke Im Voraus.
Java:
DBfragen.java
package methoden;
import java.sql.*;
public class DBfragen <V1,V2>{
static String getMaxLoC="blabla";
 V1 pName;
 V2 pLoc;
    DBfragen(V1 pName,V2 pLoc){
        this.pName=pName;
        this.pLoc=pLoc;
    }
    public V1 getFirst(){
        return pName;
    }
    public V2 getSecond(){
        return pLoc;
    }
public static DBfragen maxiLoc(){       //Compiler Fehler "Infer Generic Type Arguments,also ist gelb
                Connection cn = DriverManager.getConnection(sDbUrl, sUsr, sPwd);
                Statement st = cn.createStatement();
                ResultSet rs=null;
                rs = st.executeQuery(getMaxLoC);
        DBfragen<String,Integer> maxLoc =new DBfragen<String,Integer>(rs.getString(1),rs.getInt(2));
        return maxLoc;
            }
        }
und später mochte ich die zwei einsetzen
Code:
out.println("Das Programm "+DBfragen.maxiLoc().getFirst()+" ist am längsten( LOC ) </b></td><td>"+DBfragen.maxiLoc().getSecond());
//
 
Ich weiß zwar nicht was du da genau für Fehler hast, aber es lässt sich einfach so schreiben:
Java:
class DBfragen<V1, V2> {
  private final V1 pName;
  private final V2 pLoc;
 
  DBfragen(V1 pName, V2 pLoc) {
    this.pName = pName;
    this.pLoc = pLoc;
  }
 
  public V1 getFirst() {
    return pName;
  }
 
  public V2 getSecond() {
    return pLoc;
  }
 
  public static DBfragen<String, Integer> maxiLoc() throws SQLException {
    try (Connection cn = DriverManager.getConnection("", "", "");
         Statement st = cn.createStatement();
         ResultSet rs = st.executeQuery("blabla")) {
      return new DBfragen<>(rs.getString(1), rs.getInt(2));
    }
  }
}
Nacher dann:
Java:
DBfragen<String, Integer> answer = maxiLoc();
out.println("... answer.getFirst() .... answer.getSecond() ... ");
 
geht das auch ohne dieser Zeile?
DBfragen<String, Integer> answer = maxiLoc();
Ich brauche diese 2 Variablen auf eine html Seite haben und am besten direkt einsetzen.
Weil wie gesagt mein Code von oben geht ,nur der Compiler meckert mit gelber Warnung
DBfragen is a raw type. References to generic type DBfragen<V1,V2> should be parameterized
und wenn ich so schreibe public static DBfragen<V1,V2>
Cannot make a static reference to the non-static type V1
 
Ja klar du sollst auch public static DBfragen<String, Integer> maxiLoc() schreiben. Und wenn du das 2 mal aufrufst, dann wird auch 2 mal die DB für das Gleiche abgefragt, darum eine Variable.
 
Gibt leider Fehler aus
Code:
threw exception [An exception occurred processing JSP page  at line [17]
17: DBfragen<String, Integer> answer =DBfragen.maxiLoc();
Stacktrace:] with root cause
java.sql.SQLException: Before start of result set
 
Du musst schon prüfen, ob es Ergebnisse gibt:
Java:
if (rs.next()) {
    return new DBfragen<>(rs.getString(1), rs.getInt(2));
} else {
    return new DBFragen<>(rs.getString(1), -1); 
}
 
Alles Super,dem Performens zu Gute habe ich in HTML wie Flown gesagt hat die Variable erstellt,
else {
return new DBFragen<>(rs.getString(1), -1);
das war von mihe7 natürlich mit Absicht geschrieben,damit es nicht so einfach wird ))
20 Tausend mal while(rs.next()) geschrieben und trotzdem vergessen)).Vielen Dank Jungs ,die Leistung von Profis!
 

Anhänge

  • Danke_Jungs.png
    Danke_Jungs.png
    2,6 KB · Aufrufe: 41

Neue Themen


Zurück
Oben