Verbindung zu MySQL

Status
Nicht offen für weitere Antworten.

Kris

Bekanntes Mitglied
Hallo!

Erstmal sah mein Code für ein DAO so aus.

Code:
public class PersonDAO {
	
	Connection con;
	Statement stmt;
	
	public PersonDAO(){
		con = getConnection();
	}
	
	public Connection getConnection(){
		
		Connection con=null;
		MysqlDataSource mds = new MysqlDataSource();
 		mds.setServerName("localhost");
 		mds.setPort(3306);
 		mds.setDatabaseName("java");
 		mds.setUser("root");
 		mds.setPassword("router");
		try{
			con = mds.getConnection();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return con;
	}
	
	public List<Person> selectAll(){
		String abfrage = "Select * From tblPerson";
		List<Person> result = new ArrayList<Person>();
		try{
			ResultSet rs = con.createStatement().executeQuery(abfrage);
			while(rs.next()){
				Person nextPer = new Person();
				nextPer.setID(rs.getInt("ID"));
				nextPer.setNachname(rs.getString("Nachname"));
				nextPer.setVorname(rs.getString("Vorname"));
				nextPer.setGeburtsdatum(rs.getDate("Geburtsdatum"));
				result.add(nextPer);
			}
		}
		catch(SQLException e){
			e.printStackTrace();
		}
		
		return result;
	}


Hier war das Problem, dass sobald etwas in View verändert wurde und diese Änderung in MySQL eingetragen werden sollte, mehrere Verbindungen aufgebaut wurden. Nachdem ich den umgeändert habe wurde nur eine Aufgebaut. Nun sieht der Code ungefähr so aus. Also Connection als Variable nicht als Methode.

Code:
import java.sql.*;
import java.sql.Date;
import java.util.*;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class PersonDAO {
	
	Connection con;
	Statement stmt;
	
	public PersonDAO(){
		con = getConnection();
	}
	
	public Connection getConnection(){
		
		Connection con=null;
		MysqlDataSource mds = new MysqlDataSource();
 		mds.setServerName("localhost");
 		mds.setPort(3306);
 		mds.setDatabaseName("java");
 		mds.setUser("root");
 		mds.setPassword("router");
		try{
			con = mds.getConnection();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return con;
	}
	
	public List<Person> selectAll(){
		String abfrage = "Select * From tblPerson";
		List<Person> result = new ArrayList<Person>();
		try{
			ResultSet rs = con.createStatement().executeQuery(abfrage);
			while(rs.next()){
				Person nextPer = new Person();
				nextPer.setID(rs.getInt("ID"));
				nextPer.setNachname(rs.getString("Nachname"));
				nextPer.setVorname(rs.getString("Vorname"));
				nextPer.setGeburtsdatum(rs.getDate("Geburtsdatum"));
				result.add(nextPer);
			}
		}
		catch(SQLException e){
			e.printStackTrace();
		}
		
		return result;
	}
	
	public Person selectByID(int ids){
		
		String abfrage = "Select * From tblPerson where id=" + ids;
		Person Per = null;
		
		try{
			ResultSet rs = con.createStatement().executeQuery(abfrage);
			while(rs.next()){
				Per = new Person();
				Per.setID(rs.getInt("ID"));
				Per.setNachname(rs.getString("Nachame"));
				Per.setVorname(rs.getString("Vorname"));
				Per.setGeburtsdatum(rs.getDate("Geburtsdatum"));
			}
		}
		catch(SQLException e){
			System.out.println("Datensatz konnte nicht geladn werden.");
			e.printStackTrace();
		}
		catch (Exception e){
			System.out.println("Test");
		}
		return Per;
	}
	
	public void insertPerson(Person p){
		String eingabe = "Insert Into tblPerson(Nachname,Vorname,Geburtsdatum) Values (\""+p.getNachname()+"\",\""+p.getVorname()+"\",\""+p.getGeburtsdatum().toString()+"\")";
		try{
			con.createStatement().execute(eingabe);
		}
		catch(SQLException e){
			System.out.println("Datensatz konnte nicht eingetragen werden.");
			e.printStackTrace();
		}
	}
	
	public void insertPerson(String nnam, String vnam, Date geb){
		String eingabe = "Insert Into tblPerson(Nachname,Vorname,Geburtsdatum) Values (\""+nnam+"\",\""+vnam+"\",\""+geb+"\")";
		try{
			con.createStatement().execute(eingabe);
		}
		catch(SQLException e){
			System.out.println("Datensatz konnte nicht eingetragen werden.");
			e.printStackTrace();
		}
	

	
	public void updatePerson(Person p){
		String refresh = "UPDATE tblPerson SET Nachname=\""+p.getNachname()+"\",Vorname=\""+p.getVorname()+"\",Geburtsdatum=\""+p.getGeburtsdatum()+"\" WHERE ID="+p.getID();
		try{
			con.createStatement().executeUpdate(refresh);
		}
		catch(SQLException e){
			System.out.println("Datensatz konnte nicht aktualisiert werden.");
			e.printStackTrace();
		}
	}
	
	public void updatePerson(int idu, String nnam, String vnam, Date geb){
		String refresh = "UPDATE tblPerson SET Nachname=\""+nnam+"\",Vorname=\""+vnam+"\",Geburtsdatum=\""+geb+"\" WHERE ID="+idu;
		try{
			con.createStatement().executeUpdate(refresh);
		}
		catch(SQLException e){
			System.out.println("Datensatz konnte nicht aktualisiert werden.");
			e.printStackTrace();
		}
	}
	
	public Vector<String> getColumnNames(){
		String abfrage = "Select * From tblPerson";
		Vector<String> col = new Vector<String>();
		try{
			ResultSet rs = con.createStatement().executeQuery(abfrage);
			for(int i=0;i<rs.getMetaData().getColumnCount();i++){
				col.addElement(rs.getMetaData().getColumnLabel(i+1));
			}
		}
		catch(SQLException e){
			System.out.println("Abfrage konnte nicht ausgeführt werden.");
			e.printStackTrace();
		}
		return col;
	}
}

Wenn aber mehrere solcher DAO bestehen und auf diese zugegriffen wird, weil etwas in die MySQL Tabelle eingetragen werde soll, werden doch wieder mehrere Verbindungen aufgebaut.
Wenn ich die Connection im Control aufbaue und diese den DAOs aus dem Control zuweise, würde doch nur eine aufgebaut werden, oder verstößt es gegen die objektorientierte Programmierung?
Wenn ja, was müßte ich machen, dass nur eine Verbindung aufgebaut wird.

Und noch eine Frage:
In der Methode SelectAll() wird eine ArrayList erstellt. Diese soll später in eine Tabelle eingefügt werden. Wäre es nicht sinnvoller einen Vector zu erstellen? Was ist überhaupt der große Unterschied zwischen den beiden.

Danke schon mal.
 
M

maki

Gast
Wieso sollte jedes Dao eine eigene Connction aufbauen und verwalten (und dabei nicht mal die Ressourcen schliessen...)?

Nimm einen Connectionpool, und wenn du schon mal dabei bist, sieh dir doch iBatis an, JDBC Code zu schreiben ist sehr fehlerträchtig, aufwendig und total überholt :)

Falls du bei JDBC bleiben willst, mach es doch bitte richtig.
Solltest unbedingt die resultsets und statements schliessen, am besten gleich auf prepared statements umsteigen.
Auch ist deine sog.Fehlerbehandlung keine, wirf zB. eigene DaoExceptions weiter wenn eine operation fehlt schlägt.
 

Kris

Bekanntes Mitglied
OK also soll ich ein Framework erstellen. Leider weiss ich nicht genau wie das geht. Gibts ein schönes Tutorial oder eine Beschreibung in Dutsch für Anfänger?

Muss ich dann noch einen ConectionPool aufbauen oder kommen die DAOKlassen alle weg?
Was würde in einer eigenen DAOException drin stehen, was sich vom e.printStackTrace() unterscheiden würde?
 
M

maki

Gast
OK also soll ich ein Framework erstellen.
Davon würde ich abraten.
Nutze doch lieber eines dass es schon gibt und was erprobt ist.

Gibts ein schönes Tutorial oder eine Beschreibung in Dutsch für Anfänger?
In Englisch gibt es vieles, auf Deutsch sehr wenig.
Englisch ist in Java und der IT allgemein Vorraussetzung, sorry.

Muss ich dann noch einen ConectionPool aufbauen oder kommen die DAOKlassen alle weg?
ConnectionPools schreibt man auch nicht selbst, sondern nutzt vorhandene, zB. DBCP.
Daos sind an sich OK, allerdings sollten Schnittstelle und Implementierung getrennt sein, ist viel flexibler.

Was würde in einer eigenen DAOException drin stehen, was sich vom e.printStackTrace() unterscheiden würde?
Ein printStackTrace ist keine Fehlerbehandlung, sondern nur Fehlerausgabe auf de Console.
Alle deine Daos sollten nur eine einzige Art von Exceptions werfen: DaoException
Diese wird von den aufrufenden Programmteilen gefangen und verwertet, zB. in Form einer Fehlermeldung für den Benutzer, abbruch der Transaktion, etc.pp.

Selbst wenn du iBatis nicht einsetzt, solltest du unbedingt einen ConnectionPool einsetzen und immer alle Ressourcen schliessen!
 

Kris

Bekanntes Mitglied
Davon würde ich abraten.
Nutze doch lieber eines dass es schon gibt und was erprobt ist.

Das meinte ich schon. Aber dieses muss ja auch an mein Programm angepasst werden.

ConnectionPools schreibt man auch nicht selbst, sondern nutzt vorhandene, zB. DBCP.
Daos sind an sich OK, allerdings sollten Schnittstelle und Implementierung getrennt sein, ist viel flexibler.

Da ich noch keine Ahnung habe wie ich ein Framework einstelle, bleib ich erstmal bei den DAOs. Kannst du mir ein CodeBeispiel für getrennte Schnittstelle und Implementierung geben? Verstehe das nicht ganz.

DBCP = Datenbank Componente ?
Gibts für einen Code mit ConnectionPool auch ein kleines Besispiel?

Sorry für mein Unwissenheit. Aber das Thema ist nicht ganz einfach. Mit DriverManager wäre ich einigermaßen zurecht gekommen aber der ist ja veraltet und macht das Programm eher langsamer. Deswegen möchte ich wenn ich schon lerne direkt das vernüftige lernen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Java Verbindung mit mysql Datenbank Java Basics - Anfänger-Themen 3
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
R Input/Output Verbindung mit mySql-Datenbank Java Basics - Anfänger-Themen 9
D Eine MySQL Verbindung in mehreren Klassen Java Basics - Anfänger-Themen 8
A Erste Schritte Verbindung zu MySQL Datenbank herstellen Java Basics - Anfänger-Themen 7
F Verbindung zu MySql Datenbank Java Basics - Anfänger-Themen 4
B Client - Server Verbindung über sockets mysql DB ansprechen? Java Basics - Anfänger-Themen 6
M JSP --> Verbindung zur MySQL Datenbank geht nicht ! HILFF Java Basics - Anfänger-Themen 7
X 1 MySQL-Verbindung und viele Threads Java Basics - Anfänger-Themen 4
S MySQL-Verbindung Java Basics - Anfänger-Themen 4
M FTP-Verbindung mit Apache Commons Net Java Basics - Anfänger-Themen 5
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
D Verbindung zu xampp Java Basics - Anfänger-Themen 4
C SFTP Verbindung nicht möglich Java Basics - Anfänger-Themen 4
G Socket Verbindung aufbauen Java Basics - Anfänger-Themen 11
I Best Practice Saubere Verbindung zwischen API und Business Layer mit DTO's Java Basics - Anfänger-Themen 2
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
S Verbindung von einer Excel Datei zu Java-- Java Basics - Anfänger-Themen 4
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
R Keine Verbindung mit MariaDB Java Basics - Anfänger-Themen 18
M Datenbank verbindung Java Basics - Anfänger-Themen 19
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
B Wie steht UML mit Java in Verbindung? Java Basics - Anfänger-Themen 1
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
P Verbindung von Zwei Kreisen löschen ! Java Basics - Anfänger-Themen 6
Meeresgott OOP Socket Verbindung richtig Kapseln Java Basics - Anfänger-Themen 0
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
N httpclient - Verbindung hängt ? Java Basics - Anfänger-Themen 13
P Interface Verbindung GUI zum Programm Java Basics - Anfänger-Themen 2
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
E mit java-anwendung internet verbindung unterbrechen Java Basics - Anfänger-Themen 5
L Verbindung von Anwendung mit GUI Java Basics - Anfänger-Themen 6
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
S Https Verbindung aufbauen zum File Download Java Basics - Anfänger-Themen 7
H Problem mit Regex in Verbindung mit BufferedReader Java Basics - Anfänger-Themen 4
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
S Fehler beim Auslösen des ActionListeners in Verbindung mit einer Queue Java Basics - Anfänger-Themen 5
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
S Datentypen Regex in Verbindung mit einem Integer Wert Java Basics - Anfänger-Themen 3
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
0 Postgres verbindung Java Basics - Anfänger-Themen 4
B Verbindung zu einen anderen Rechner Java Basics - Anfänger-Themen 2
B Derby-Java-Verbindung Java Basics - Anfänger-Themen 2
I Datenbank - nach erster Verbindung keine Verbindung mehr Java Basics - Anfänger-Themen 3
J Access-Verbindung Java Basics - Anfänger-Themen 2
H Probleme mit .Jar in Verbindung mit Bildern Java Basics - Anfänger-Themen 10
S Verbindung Klassen<-> Klassen/DB Java Basics - Anfänger-Themen 2
E DB-Verbindung zu OpenOffice: Base Java Basics - Anfänger-Themen 3
J VPN Verbindung Java Basics - Anfänger-Themen 6
M Verbindung zu einem Server über Eclipse Java Basics - Anfänger-Themen 6
G FTP Verbindung in Applet Java Basics - Anfänger-Themen 3
S Java Applet - Verbindung zum Eigenen Server Java Basics - Anfänger-Themen 2
J DB-Verbindung Java Basics - Anfänger-Themen 2
TiME-SPLiNTER mehrere HTTPRequests mit selber Verbindung Java Basics - Anfänger-Themen 2
F Peer-to-Peer Verbindung? Java Basics - Anfänger-Themen 5
B Verbindung zur Datenbank (SQL.) Java Basics - Anfänger-Themen 13
R Java, Bluetooth: mit PC eine SPP Verbindung aufbauen Java Basics - Anfänger-Themen 1
G Link Verbindung Java Basics - Anfänger-Themen 2
G Verbindung zu einer Oracle DB aufbauen Java Basics - Anfänger-Themen 2
G Verbindung herstellen Java Basics - Anfänger-Themen 3
M Telnet Verbindung aufbauen Java Basics - Anfänger-Themen 2
M SQL Verbindung Java Basics - Anfänger-Themen 9
C Collection in Verbindung mit String.split speicherlastig Java Basics - Anfänger-Themen 20
G SSL Verbindung testen? Java Basics - Anfänger-Themen 1
J Problem mit forschleifen in Verbindung mit Kondtional operat Java Basics - Anfänger-Themen 2
S Server/Client Verbindung Java Basics - Anfänger-Themen 2
R JDBC Verbindung geht nicht Java Basics - Anfänger-Themen 4
G addKeyListener in verbindung mit JFrame !? Java Basics - Anfänger-Themen 2
D java in verbindung mit svg und html Java Basics - Anfänger-Themen 3
J Verbindung zu dbf Dateien Java Basics - Anfänger-Themen 6
D Verbindung von Methoden und Felder Java Basics - Anfänger-Themen 3
C string über server/client verbindung senden ? Java Basics - Anfänger-Themen 4
N SSH-Verbindung zu entferntem Rechner aufbauen Java Basics - Anfänger-Themen 5
G Programmstart mit JAR File - keine DB-Verbindung Java Basics - Anfänger-Themen 2
megachucky GUI-Problem in Verbindung mit while-Schleife und Listener Java Basics - Anfänger-Themen 4
C No suitable driver found for jdbc:odbc:mysql Java Basics - Anfänger-Themen 8
E Mysql Update wenn es nicht existiert insert Java Basics - Anfänger-Themen 14
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
H Verbindungsprobleme BluJ und MySQL Java Basics - Anfänger-Themen 1
R Java mit MySQL - Verbindungsprobleme Java Basics - Anfänger-Themen 1
B Arquillian installieren - Maven, WildFly, MYSQL Java Basics - Anfänger-Themen 1
M Java Mysql ausführbare datei Java Basics - Anfänger-Themen 7
B MySQL (jdbc) -> connection liefert NULL Java Basics - Anfänger-Themen 3
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
Dimax Programme ,als Text in MySql speichern Java Basics - Anfänger-Themen 7
Q-bert MYSQL-Eintrag Java Basics - Anfänger-Themen 2
J Sonderzeichenproblem bei Datenabfrage in MySQL Java Basics - Anfänger-Themen 6
F Java MySQL Java Basics - Anfänger-Themen 3
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
D zu viele MySQL Connections Java Basics - Anfänger-Themen 18
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
B MySQL starten / stoppen -> Stoppen erzeugt neuen Prozess Java Basics - Anfänger-Themen 0
B MySQL Path bekommen Java Basics - Anfänger-Themen 40
P Brauche Hilfe bei ResultSet mit MySQL Java Basics - Anfänger-Themen 6
H JAva und MySQL Java Basics - Anfänger-Themen 1
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24

Ähnliche Java Themen

Neue Themen


Oben