MySQL Methodenaufruf mit Connection Übergabe

Dimax

Top Contributor
Guten Tag ,ich habe angefangen Java zu lernen und habe ein paar Fragen.Von erfahrenen Kollegen habe ich ein Hinweis bekommen ,dass :wenn ich eine Methode habe wo Connection gebraucht wird ,besser diese Methode aufrufen und gleich die Connection mitgeben also zmb:
folgende Methode:
Java:
public static String[][] topTenKomplex() throws ClassNotFoundException{
       
        List<String> topTenKomplex=new ArrayList<>();
        List<Double> topTenKomplexWert=new ArrayList<>();
        String [][] statik;
        String topTen="select programm.programm,macro_daten.fm from programm join macro_daten "
                + "on programm.programm_id=macro_daten.programm_id order by macro_daten.fm desc limit 10;";
        String sDbDrv = MYSQLparameter.getDriver();
        String sDbUrl = MYSQLparameter.getURL();
        String sUsr = MYSQLparameter.getUser();
        String sPwd = MYSQLparameter.getPassword();
        Class.forName(sDbDrv);
        try{
             Connection cn=DriverManager.getConnection(sDbUrl, sUsr, sPwd);
            Statement st1=cn.createStatement();
            ResultSet rs1=st1.executeQuery(topTen);
            while(rs1.next()){
                topTenKomplex.add(rs1.getString(1));
                topTenKomplexWert.add(rs1.getDouble(2));
            }statik=new String[topTenKomplex.size()][2];
            for(int i=0;i<statik.length;i++){
                  
                statik[i][0]=topTenKomplex.get(i);
                statik[i][1]=Double.toString(topTenKomplexWert.get(i));        
               
            }
            cn.close();
        }catch(Exception e){e.printStackTrace();statik=new String[topTenKomplex.size()][2];}

        return statik;
    }
wenn ich aber Connection baue auf da ,wo diese Methode aufgerufen wird und leite es an diese Methode weiter wird die so aussehen:
Java:
public static String[][] topTenKomplex(Connection c) {
       
        List<String> topTenKomplex=new ArrayList<>();
        List<Double> topTenKomplexWert=new ArrayList<>();
        String [][] statik;   
        String topTen="select programm.programm,macro_daten.fm from programm join macro_daten "
                + "on programm.programm_id=macro_daten.programm_id order by macro_daten.fm desc limit 10;";
       
        try( Statement st1=c.createStatement();ResultSet rs1=st1.executeQuery(topTen);){                       
           
            while(rs1.next()){
                topTenKomplex.add(rs1.getString(1));
                topTenKomplexWert.add(rs1.getDouble(2));
            }statik=new String[topTenKomplex.size()][2];
            for(int i=0;i<statik.length;i++){
                   
                statik[i][0]=topTenKomplex.get(i);
                statik[i][1]=Double.toString(topTenKomplexWert.get(i));           
               
            }
       
        }catch(Exception e){e.printStackTrace();statik=new String[topTenKomplex.size()][2];}

        return statik;
    }
und es sieht viel besser aus und macht nur das was sie machen soll aber:
ist es in Ordnung wenn die Methode in einer JSP aufgerufen wird und deswegen soll ich die Connection dann halt in jsp aufbauen um an diese Methode weiter zu leiten ,oder gibs Möglichkeit dass umgehen?
 

Dimax

Top Contributor
Habe ein Paar Tagen mich mit Connection Pools beschäftigt. Habe mich für c3PO entschieden .Folgende Klasse ist entstanden:
Java:
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ComboPoole{
    static String sDbUrl = MYSQLparameter.getURL();
    static String sUsr = MYSQLparameter.getUser();
    static String sPwd = MYSQLparameter.getPassword();
    static String sDrv = MYSQLparameter.getDriver();
    private ComboPooledDataSource cpds;
    private static ComboPoole dataSource;
   
private  ComboPoole() {
   
    cpds = new ComboPooledDataSource();
    try{
        cpds.setDriverClass(sDrv);
    }catch (PropertyVetoException e) {
        e.printStackTrace();
    }
        cpds.setJdbcUrl(sDbUrl);
        cpds.setUser(sUsr);
        cpds.setPassword(sPwd);
       
        Properties prop=new Properties();
        prop.setProperty("user", sUsr);
        prop.setProperty("password", sPwd);
        prop.setProperty("useUnicode", "true");
        prop.setProperty("characterEncoding", "UTF8");
       
        cpds.setProperties(prop);
        cpds.setInitialPoolSize(10);
        cpds.setMaxStatements(180);
        cpds.setMaxStatementsPerConnection(180);
        cpds.setMinPoolSize(10);
        cpds.setAcquireIncrement(10);
        cpds.setMaxPoolSize(60);
        cpds.setMaxIdleTime(30);
        //cpds.setNumHelperThreads(10);
    }
public static ComboPoole getInstance(){
    if(dataSource==null)dataSource=new ComboPoole();
    return dataSource;
}
public Connection getConnection(){
    Connection conn=null;
    try{
        conn=cpds.getConnection();
    }catch(SQLException e){e.printStackTrace();}
    return conn;
}
}

da wo es gebraucht wird ,wird auch aufgerufen:
view.jsp
Code:
html sachen....
<%
Connection cn=ComboPoole.getInstance().getConnection();....
+"<tr><td style=\"text-align:left\"><b>Im Durchschnitt gibt es ( LOC )</b></td><td>"+DBfragen.getAvgLoc(cn)+"</td></tr>"
+"<tr><td style=\"text-align:left\"><b>Das Programm "+DBfragen.maxiLoc(cn).getFirst()+" ist am längsten( LOC ) </b></td><td>"+DBfragen.maxiLoc(cn).getSecond()+"</td></tr>"......cn.close();
DBfragen.java
und die Methode die Daten liefert
Java:
public static DBfragen<String, Double> maxKomplex(Connection cn)throws SQLException{
               
                Statement st = cn.createStatement();
                ResultSet rs=null;
                rs = st.executeQuery(getFm);
                if (rs.next()) {
                    DBfragen<String,Double> maxFm =new DBfragen<String,Double>(rs.getString(1),rs.getDouble(2));           
                   
                    return maxFm;
                } else {
                    DBfragen<String,Double> maxFm =new DBfragen<String,Double>("Keine gespeichert",0.0);
                     return maxFm;
                }   
            }
Dazu habe ich 2 Fragen-
1.Habe ich alles richtig verstanden mit Connection Pools?
2.Wie geht es weiter,wie in der Antwort von mrBrown steht,muss ich jetzt das alles noch kapseln,habe die 2 Patterns angeschaut.Mehrere empfehlen den Repository statt DOA zu nutzen.Ein Paar Links wo es gut erklärt ist?
 

mrBrown

Super-Moderator
Mitarbeiter
da wo es gebraucht wird ,wird auch aufgerufen:
view.jsp
Ich weiß, wir wiederholen uns: aber lass doch den Java-Code aus den JSPs raus.

1.Habe ich alles richtig verstanden mit Connection Pools?
Jain. Lass als erstes mal static da weg.

Welchen Container benutzt du?

2.Wie geht es weiter,wie in der Antwort von mrBrown steht,muss ich jetzt das alles noch kapseln,habe die 2 Patterns angeschaut.Mehrere empfehlen den Repository statt DOA zu nutzen.Ein Paar Links wo es gut erklärt ist?

Einfach mal kurz Google benutzen ;)
DAO: https://www.oracle.com/technetwork/java/dataaccessobject-138824.html
Repository: https://medium.com/@pererikbergman/repository-design-pattern-e28c0f3e4a30

Als Literatur-Empfehlung: Design Patterns. Elements of Reusable Object-Oriented Software und domain driven design.
 

Thallius

Top Contributor
Wieder so ein Beispiel wo etwas, das jeder kennt und benutzt, nämlich ein Singleton, einen neuen wichtige Namen bekommt damit sich irgendein theoretischer Informatiker eine tolle neue Idee zuschreiben lassen kann und ein Programmierer keine Ahnung hat was mit ConnectionPool gemeint ist, wenn er nicht seine Zeit verschwendet und sich das durchliest.....
 

Dimax

Top Contributor
Lass Methodenaufrufe in JSP nach Möglichkeit sein.
Das ist mir klar,deswegen versuche ich das mit Repository zu lösen. Was ich nicht verstehe,wie kann ich eine Tabelle in JSP bauen wenn ich keine Daten habe die mir Java Methode liefert,oder wie kriege ich die ohne Methodenaufrufe?
Das ist die Tabelle wo ich die Daten rein setze(Foto).
Lass als erstes mal static da weg.
public static ComboPoole <- diesen?
Welchen Container benutzt du?
Ich benutze keine EJB ,fange erst mal klein an.
 

Anhänge

  • tab.png
    tab.png
    41,2 KB · Aufrufe: 34

mrBrown

Super-Moderator
Mitarbeiter
Wieder so ein Beispiel wo etwas, das jeder kennt und benutzt, nämlich ein Singleton, einen neuen wichtige Namen bekommt damit sich irgendein theoretischer Informatiker eine tolle neue Idee zuschreiben lassen kann und ein Programmierer keine Ahnung hat was mit ConnectionPool gemeint ist, wenn er nicht seine Zeit verschwendet und sich das durchliest.....
"Zeit verschwenden" und mal durchlesen, was das beides überhaupt ist, wäre dir offensichtlich wirklich mal anzuraten.

Der "neue Name" ist älter als zwanzig Jahre und hat mit dem "Beispiel was jeder kennt und benutzt" absolut nichts zu tun.
Singleton und ConnectionPool sind völlig unterschiedliche Dinge, die völlig unterschiedliche Probleme auf völlig unterschiedlich Art und Weise lösen.
Jeder, der nicht grad völliger Neueinsteiger ist, sollte beides kennen.


Aber Hauptsache mal wieder aufgeregt über Dinge, von denen man keine Ahnung hat...

(Theoretische Informatiker sind übrigens die, die mit sowas am wenigsten zu tun haben)
 

mrBrown

Super-Moderator
Mitarbeiter
Das ist mir klar,deswegen versuche ich das mit Repository zu lösen. Was ich nicht verstehe,wie kann ich eine Tabelle in JSP bauen wenn ich keine Daten habe die mir Java Methode liefert,oder wie kriege ich die ohne Methodenaufrufe?
Das ist die Tabelle wo ich die Daten rein setze(Foto).
In dem du das in sinnvollen Beans kapselst, zB hier grob beschreiben: http://openbook.rheinwerk-verlag.de...23_006.htm#mj07bda1db155e5cd6868a66e794cf4822


public static ComboPoole <- diesen?
Das ist das einzige static, welches man mit viel wohlwollen lassen könnte.
Viel wichtiger sind alle anderen statics (in deinem gesamten Programm).

Ich benutze keine EJB ,fange erst mal klein an.
Mit Container meinte ich den Server, oder startest du das einfach per main? (und selbst dann, welches Framework?)
 

Dimax

Top Contributor
Mit Container meinte ich den Server
Tomcat v8.5
Viel wichtiger sind alle anderen statics
Java:
    String sDbUrl = MYSQLparameter.getURL();
    String sUsr = MYSQLparameter.getUser();
    String sPwd = MYSQLparameter.getPassword();
    String sDrv = MYSQLparameter.getDriver();
weg.Danke dir mrBrown für die Tipps. Erstmal schaue Repository dann komme zu JBeans rüber,bis dahin lasse ich Methoden in jsp.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Probleme beim Methodenaufruf einer EJB Datenbankprogrammierung 10
Maxim6394 EclipseLink + SQLite | Unable to acquire a connection from driver [null] Datenbankprogrammierung 6
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
S Oracle DB-Connection in .jar file ändern Datenbankprogrammierung 11
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
K Glassfish 4.1.1 Connection Pool u. Resource Ref Datenbankprogrammierung 20
OnDemand Hikari Pool Connection Validation Datenbankprogrammierung 18
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
S Connection Pool Hikari Datenbankprogrammierung 7
P MySQL Connection Global Datenbankprogrammierung 13
J Connection Datenbankprogrammierung 1
F Brauche dringend Hilfe Java-Access Connection Datenbankprogrammierung 3
S New Connection Wizard / NetBeans Datenbankprogrammierung 0
P Frage zu Connection.close() Datenbankprogrammierung 4
T NoSQL Connection für die Thesis [GWT] Datenbankprogrammierung 1
M Connection erstellen Datenbankprogrammierung 1
F Monitoring DB Connection Pool Datenbankprogrammierung 3
H JDBCODBC - Connection-Objekt Datenbankprogrammierung 3
E MySQL SQL - wann connection schließen Datenbankprogrammierung 2
R HSQLDB Connection refused Datenbankprogrammierung 2
B JDBC Connection Fehler Datenbankprogrammierung 8
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
reibi Derby/JavaDB Connection refused Datenbankprogrammierung 14
S Ressourcenverbrauch Connection Open/Close Datenbankprogrammierung 11
W MySQL-Connection-Objekt übergeben Datenbankprogrammierung 2
N SQL-Connection Datenbankprogrammierung 3
B MySQL Datenbank Connection als String zurückgeben Datenbankprogrammierung 7
M Connection Pooling Datenbankprogrammierung 7
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
K Connection - möglich & nicht möglich Datenbankprogrammierung 2
T Datenbank connection mit Servlet Datenbankprogrammierung 4
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
H H2 H2-Connection bei WebStart Datenbankprogrammierung 6
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
ruutaiokwu jdbc connection als singleton Datenbankprogrammierung 11
S Wie überprüfe ich ob die Instanz einer Connection gerade werwendet wird? Datenbankprogrammierung 4
X Connection schließen oder speichern? Performance Frage Datenbankprogrammierung 7
C Derby/JavaDB JavaDB: Keine Connection Datenbankprogrammierung 7
T Pooled Connection und Connection Pool Datenbankprogrammierung 2
S Java Connection to MySQL Datenbank FunPic Datenbankprogrammierung 4
Q java.lang.NullPointerException connection = null Datenbankprogrammierung 13
N Connection bleibt null Datenbankprogrammierung 7
H DB-Connection zu MySQL Datenbankprogrammierung 12
D Wie bekommt man die JDBC connection zum laufen?(Eclipse) Datenbankprogrammierung 16
T MySQL ResultSet zurückgeben nachdem Connection geschlossen wurde? Datenbankprogrammierung 3
B db2 jdbc connection Datenbankprogrammierung 4
G MySQL Connection Problem Datenbankprogrammierung 3
R sql.Connection vs. mysql.Connection Datenbankprogrammierung 3
R Connection Pooling - Tote Verbindungen Datenbankprogrammierung 5
S Connection Pool Datenbankprogrammierung 23
P JPA Connection dynamisch hinzufügen Datenbankprogrammierung 2
S JDBC connection open Datenbankprogrammierung 3
D MySQL Verständnisproblem mit globalen Variablen (Connection) Datenbankprogrammierung 7
F Connection refused: connect Bei Verbindungsherstellung zu MySQL Datenbank Datenbankprogrammierung 3
R Connection Problem für eine externe DB mit Java (JDBC) Datenbankprogrammierung 9
R Connection nur als root Datenbankprogrammierung 3
N Connection kann nicht geschlossen werden!? Datenbankprogrammierung 4
S JPA Hibernate: "The user must supply a jdbc connection" Datenbankprogrammierung 4
F MySQL - Connection JDBC-Driver Problem Datenbankprogrammierung 4
E MSSQL-Server connection aufbau sehr langsam Datenbankprogrammierung 2
S Zuviele DB Connection Datenbankprogrammierung 4
A Connection Variable in anderer Klasse verwenden -> statement Datenbankprogrammierung 2
S Connection String MS Access mit Systemdatenbank / Arbeitsgruppeninformationsdatei Datenbankprogrammierung 4
R DB-Connection, aber wie? Datenbankprogrammierung 2
F Java SQL Connection mit Rollback Datenbankprogrammierung 2
P DB- Connection lösen Datenbankprogrammierung 7
padde479 Connection String Oracle Datenbankprogrammierung 5
W JDBC Connection isValid()? Datenbankprogrammierung 4
G Frage zu connection? Datenbankprogrammierung 9
G allgemeine JDBC-Connection Frage Datenbankprogrammierung 2
H Wie kann ich eine Datenbank Connection aus XML-Datei lesen! Datenbankprogrammierung 2
J jdbc Oracle Connection refused Datenbankprogrammierung 6
D Probleme mit mysql-Connection Datenbankprogrammierung 10
K Wo "Connection" Object erstellen? Datenbankprogrammierung 7
N Kleine Frage zu Connection Pooling mit DataSource Datenbankprogrammierung 2
M Hilfe - keine Connection zur DB Datenbankprogrammierung 4
G Connection zu einer Oracle DB erstellen Datenbankprogrammierung 8
K Oracle XE Connection Problem Datenbankprogrammierung 2
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5
G SQL Server Connection Datenbankprogrammierung 12
K "Connection timed out: connect" bei MySQL-Verbindu Datenbankprogrammierung 10
R Warum ist meine Connection null? Datenbankprogrammierung 6
B Connection Pools Datenbankprogrammierung 3
U Connection läuft nicht als jar Datenbankprogrammierung 6
R Interessantes Problem mit Connection-Pool. Datenbankprogrammierung 2
C Statement/Connection SQLWarning Datenbankprogrammierung 4
P Connection problems Datenbankprogrammierung 15
J Keine Connection zur MySQL Db Datenbankprogrammierung 6
K db connection wann schließen Datenbankprogrammierung 4
W Problem bei Connection mit SQLServer-Datenbanke mittels Java Datenbankprogrammierung 2
S Viele Klassen sollen eine Connection benutzen Datenbankprogrammierung 3
K Connection error Datenbankprogrammierung 18
G SQLException: No operations allowed after connection closed Datenbankprogrammierung 2
T problem mit mysql connection Datenbankprogrammierung 6
H Connection Pool + Tomcat + Oracle10g Datenbankprogrammierung 7
T JDBC Connection refused Problem Datenbankprogrammierung 6

Ähnliche Java Themen


Oben