Wo "Connection" Object erstellen?

Status
Nicht offen für weitere Antworten.
Hallo,

meine Frage ist eigentlich kurz und präzise.

Und zwar bahnt sich ein neues Projekt an. In diesem werde ich mittels JDBC auf eine MySQL Datenbank zugreifen. Jetzt frage ich mich allerdings, wie oft, und wo ich einen Connect zur Datenbank machen muss. Jedesmal, wenn ich ein neues Statement absetze? Oder starte ich in meiner "Start"klasse ein neues Connection-Object, stelle den Connect also her, und greife aus allen anderen Klasse, wo ich diese Connection ebenfalls benötige, darauf zu?



Mfg Tom
 

L-ectron-X

Gesperrter Benutzer
Die Verbindung zu einer Datenbank herzustellen ist etwas "teuer". Daher ist es üblich zu Beginn eine Verbindung herzustellen und diese bis zum Beenden des Programms zu verwenden.
 
Hallo,

ich danke Euch Zweien wirklich sehr.

Gerade heute morgen hatte ich nämlich schon wieder nach einigen Tests "Too many connections" in der Datenbank stehen. Dämlich wie ich bin habe ich nämlich eine Klasse gehabt, die immer wieder einen neuen Connect aufmachte, und dieses Object dann zurück gegeben hat. Teilweise habe ich einen Connect nicht mal mehr nach der Verwendung geschlossen.

Jetzt handhabe ich es so, dass ich ein Statement erstelle (mittels con.createStatement()) und danach direkt den Connect mittels con.close() schließe. Es gibt Ausnahmen wo der Connect noch benötigt wird. Die Regel ist aber, dass der Connect geschlossen werden kann.

Ich war mir nicht sicher ob das so funktioniert, darum habe ich einen Test gemacht:
1.) Erstellung des Connection-Objekts "Connection con = de.xxx.database.Connect.getConnection();"
2.) Erstellung eines Statement-Objekts "Statement stmnt = con.createStatement()";
3.) Schließen der Connection "con.close();"
4.) Erstellen eines ResultSet-Objekts "ResultSet rs = stmnt.executeQuery(...)"

So funktionierte es einwandfrei. Gibt es Einwände den Connect direkt nach Erstellung des Statement-Objekts zu schließen? Wie gesagt, 100% sicher bin ich mir nicht, aber der Test war erfolgreich.

Jetzt sieht meine Connect-Klasse wiefolgt aus:
Code:
Klasse de.xxx.database.Connect
-----------------------------
private static javax.sql.PooledConnection pc;
	
// Einmaliger Aufruf direkt zu Anfang meines Programms
	public static void connect() {
		
		pc = null;
		try {
			
			ReadConfig config = new ReadConfig("config"); // config-Datei die die Daten für den MySQL-Connect beinhaltet
			
			MysqlConnectionPoolDataSource ds = new MysqlConnectionPoolDataSource();
			ds.setUrl(config.getProperty("database_connectionstring"));
			ds.setUser(config.getProperty("database_user"));
			ds.setPassword(config.getProperty("database_pass"));
			
			pc = ds.getPooledConnection();
		} catch (Exception e) {
			
			System.out.println(e.toString());
		}
	}
	
	public static Connection getConnection() {
		
		try {
		
			return pc.getConnection();
		} catch (Exception e) {
			
			System.out.println(e.toString());
			return null;
		}
	}

Ist dies so ok, oder habe ich noch einen Fehler begannen/etwas nicht berücksichtigt?




Mfg Tom
 

Niki

Top Contributor
Wie schon oben erwähnt solltest du EINE Connection am Anfang der Applikation erstellen. Wenn die Applikation beendet wird solltest du die Connection wieder schließen. Dafür einfach einen WindowListener an das Hauptfenster hängen und wenn windowClosing aufgerufen wird die Connection schließen. Bau dir einfach ein Objekt welches die Connection statisch hält. Etwa so:
Code:
private static Connection connection = null;

public static Connection getConnection(){
  if(connection == null){
    connection = DriverManager.getConnection("...");
  }

  return connection;
}

public static void closeConnection(){
  if(connection != null)
    connection.close();
}

Wenn du einen Server hättest auf den sich mehrere Clients verbinden könntest du einen Pool aufbauen. Für jede Transaktion würde dann eine Connection aus dem Pool geholt werden und beim Beenden der Transaktion wieder in den Pool zurück gelegt werden.
 
M

maki

Gast
Wie schon oben erwähnt solltest du EINE Connection am Anfang der Applikation erstellen.
Dann bräuchte doch gar keinen ConnectionPool..

Was er vergessen hat, ist die Connection aus dem Pool wieder zu schliessen.
 

Niki

Top Contributor
Ja, du verwendest halt einen Pool. Das ist bei einer SingleUser-Anwendung nicht notwendig, kannst du aber auch machen. Wenn du einen Pool verwendest solltest du die Connection halt jedes mal zurück legen (bei DataSource macht das das close automatisch).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
Dimax MySQL Methodenaufruf mit Connection Übergabe Datenbankprogrammierung 8
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
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
L DB2 connection problem Datenbankprogrammierung 2

Ähnliche Java Themen


Oben