Connection schließen oder speichern? Performance Frage

xX_QueAnw_Xx

Mitglied
Hi. Ich habe ein Programm das sehr, sehr häufig, fast permanent auf meine Datenbank zugreifen musse. Die Datenbank Verbindung erstelle ich mit einer staatischen Klasse (Connect) welche die Verbindung als private Attribut speicher, siehe UML:


Allerdings ist das ganze relativ langsam. Das könnte jetzt daran liegen das ich einen Kostenlosen MySQL hoster benutze oder aber daran das es schlicht weg schlecht programmiert ist.

Mein Frage. Sollte ich die Verbindung immer wenn ich sie brauche neu erstellen und am Ende wieder schließen oder ist das so in Ordnung mit Zentraler speicherung der verbindung.
+Wie sollte ich mit den Create Statements umgehen?

Eine normale Abfrage sieht bei mir zurzeit so aus:

Erzeugen der Verbindung
Java:
public class Main {
    static Login start;
    public static void main(String[] args) throws SQLException {
        Connect.makeConnection("www.******.net", "jtask", "xX_QueAnw_Xx", "******");
        showLogin();
    }
//....
Abfrage:
Java:
           String query="SELECT pw FROM user WHERE uname=\'"+user.trim()+"\' limit 1";
           ResultSet rs=Connect.getConnect().createStatement().executeQuery(query);
           if (rs.next()){
              if(rs.getString(1).trim().equals(pw.trim()))
                  correct=true;
           }
           rs.close();

Verbesserungsvorschläge? Gibt es für soetwas Konventionen.
 
G

Gast2

Gast
Wenn es irgendgeht würde ich immer ConnectionPooling verwenden. Für jede Anfrage eine Verbindung aufbauen und wieder schließen ist sehr uneffizient.

Verbesserungvorschläge:
1) Benutze ConnectionPooling
2) Statische Connection Klasse ist als Design nicht wirklich schön, siehe 1)
3) Verwende PreparedStatements
4) Niemals Passwörter in der DB speichern! Nur die Hashes

Das es sehr langsam ist würde ich jetzt mal auf den kostenlosen Mysql hoster schieben. Die kostenloasen Service Provider werden dir nicht grade eine qualitativ gute Infrastruktur bieten.

Probier es doch zum Entwicklen erstmal bei dir lokal aus.
 
Zuletzt bearbeitet von einem Moderator:

Ebenius

Top Contributor
Hinweis am Rande: Es hängt immer vom JDBC-Treiber ab, ob man auf die Nase fällt. Aber auch die Statements sollten nach dem ResultSet geschlossen werden.

Ebenius
 

xX_QueAnw_Xx

Mitglied
Wenn es irgendgeht würde ich immer ConnectionPooling verwenden. Für jede Anfrage eine Verbindung aufbauen und wieder schließen ist sehr uneffizient.

Verbesserungvorschläge:
1) Benutze ConnectionPooling
2) Statische Connection Klasse ist als Design nicht wirklich schön, siehe 1)
3) Verwende PreparedStatements
4) Niemals Passwörter in der DB speichern! Nur die Hashes

Das es sehr langsam ist würde ich jetzt mal auf den kostenlosen Mysql hoster schieben. Die kostenloasen Service Provider werden dir nicht grade eine qualitativ gute Infrastruktur bieten.

Probier es doch zum Entwicklen erstmal bei dir lokal aus.

1. / 2. Ok danke das werde ich mir aufjedenfall anschauen auch wenn ich jetzt noch keine Vorstellung davon habe was es ist.

Gleiches gilt für 3.

zu 4. Wenn dieses Programm zum effektiven einsatz kommen würde, würde ich keine Plain PWs speichern, das weiß ich, aber es dient mehr zu Test zwecken und als Hobby entwicklung um zu schauenw as machbar ist und was alles Möglich ist.

Also eine gängige Konvention gibt es sonst dazu nicht? Wie gesagt bin gespannt auf das Connection Pooling

Hinweis am Rande: Es hängt immer vom JDBC-Treiber ab, ob man auf die Nase fällt. Aber auch die Statements sollten nach dem ResultSet geschlossen werden.

Ebenius


Ok mit der von mir beschriebenen Variante sollte ich natürlich auch X statement Objekte auf machen und niemals schließen. Hier ist halt die Frage Wann und wie effektiv arbeitet hier der Garbage Collector.

mfG
 
G

Gast2

Gast
Die best practice ist halt einfach einen ConnectionPool zu benutzen. Der kümmert sich selbstständig darum Verbindungen zu der Datenbank aufzubauen und abzubauen. Wenn du in deiner Applikation dann eine Verbindung brauchst fragst du die beim Pool an und bekommst eine Verbindung. Wenn du mit der Abfrage fertig bist "entlässt du die Verbindung" zurück in den Pool.

In der Regel sollte ein Pool dann so konfiguriert sein das er immer ein paar aktive Verbindungen zu der Datenbank bereithält.
 

MrWhite

Bekanntes Mitglied
Naja, mit einem guten Hash-Algorithm und vernünftigen Salts sehe ich da kein Problem.

Sicher ist sicher. So können auch Schwachstellen im Algorithmus wie sie z.B. in MD5 gefunden wurden nicht so einfach ausgenutzt werden. Ein gesalzenes Hash das obfuscated wurde ist so ziemlich die höchste Sicherheitsstufe, die man auf diesem Wege erreichen kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E MySQL SQL - wann connection schließen Datenbankprogrammierung 2
K db connection wann schließen Datenbankprogrammierung 4
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
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
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
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

Neue Themen


Oben