Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 00:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Java] MySql-Connection Klasse

Discussion on [Java] MySql-Connection Klasse within the Java forum part of the Coders Den category.

Reply
 
Old   #1
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
[Java] MySql-Connection Klasse

Hey,
im Zuge einer Aufgabe musste ich eine Verindung mit der Datenbank mittels JDBC aufbauen/herstellen. Also dachte ich, ich könnte meine Connection-Klasse für MySql, mit euch teilen.

Es wird ein MySql-Connector gebraucht welchen man ganz leicht von zB. der offizielen Seite downloaden kann:

Vielleicht findet irgendwann, irgendwer Verwendung darin.

ConnectionLogic.java:
Code:
package XxharCs;

import com.mysql.jdbc.jdbc2.optional.*;
import java.sql.*;
import java.util.regex.*;
import javax.sql.*;

/**
 * Diese Klasse implementiert die Connection Logik. Es wird also die Verbindung zur Datenbank verwaltet, ebenfalls wie das schließen der
 * Verbindung zur Datenbank. Weiters verwaltet diese Klasse eine execute-Methode die den vom Benutzer eingegeben String bereitstellt und an die 
 * Datenbank absendet.
 * 
 * @author XxharCs
 * @version 1.3
 */
public class ConnectionLogic {

	private String host, user, pass, db;
	private MysqlDataSource ds;
	private Connection con;
	private ResultSet rs;
	private PreparedStatement st;
	private boolean status = false;

	/**
	 * Diese Methode übernimmt die vom Benutzer angegebenen Connection-Parameter.
	 * @param host der Hostname
	 * @param user der Username
	 * @param pass das Password
	 * @param db der Datenbankname
	 */
	public void setConnection(String host, String user, String pass, String db) {

		this.host = host;
		this.user = user;
		this.pass = pass;
		this.db = db;
	}

	/**
	 * Diese Methode stellt eine Verbindung zur Datenbank.
	 * @return ob die Verbindung erfolgreich war oder nicht.
	 */
	public boolean connect() {

		ds = new MysqlDataSource();

		ds.setServerName(getHost());
		//ds.setPort(7188); // Für die Server2Go-Datenbank
		ds.setUser(getUser());
		ds.setPassword(getPass());
		ds.setDatabaseName(getDB());

		try {

			con = ds.getConnection();
			System.out.println("Erfolgreich verbunden!");
			return status = true;
		}catch(SQLException sqle) {

			System.out.println("Error: " + sqle.getMessage());
			return status = false;
		}
	}

	/**
	 * Diese Methode bricht die Verbindung zur Datenbank ab.
	 */
	public void disconnect() {

		if(status == true) {

			try {

				con.close();
				if(st != null && rs != null) {
					st.close();
					rs.close();
					st = null;
					rs = null;
				}
				con = null;
				System.out.println("Erfolgreich geschlossen!");
				status = false;
			}catch(SQLException sqle) {

				System.out.println("Error: " + sqle.getMessage());
				status = true;
			}
		}
	}

	/**
	 * Der vom Benutzer eingegebener SQL Befehl wird an die Datenbank geschickt bzw. der vom Benutzer eingegebener SQL Befehl wird ausgeführt.
	 * @param sql der SQL Befehl vom Benutzer
	 * @return die Rückgabe des SQL Befehls
	 */
	public ResultSet execute(String sql) {

		try {

			st = con.prepareStatement(sql);
			rs = st.executeQuery();
			return rs;
		}catch(SQLException sqle) {

			System.out.println("Error: " + sqle.getMessage());
			return null;
		}
	}

	/**
	 * Getter-Methode für den Hostname
	 * @return den Hostname
	 */
	public String getHost() {

		return this.host;
	}

	/**
	 * Getter-Methode für den Username
	 * @return den Username
	 */
	public String getUser() {

		return this.user;
	}

	/**
	 * Getter-Methode für das Password
	 * @return das Password
	 */
	public String getPass() {

		return this.pass;
	}

	/**
	 * Getter-Methode für den Datenbanknamen
	 * @return den Datenbanknamen
	 */
	public String getDB() {

		return this.db;
	}

	/**
	 * Getter-Methode für den jeweiligen Connection-Status der Datenbank
	 * @return den derzeitigen Connection-Status mit der Datenbank (falls verbunden true, wenn nicht false)
	 */
	public boolean getStatus() {

		return this.status;
	}

	/**
	 * Setter-Methode die den jeweiligen Connection-Status der Datenbank setzt
	 * @param status den Connection-Status der Datenbank
	 */
	public void setStatus(boolean status) {

		this.status = status;
	}
}
XxharCs is offline  
Old 01/26/2014, 23:24   #2
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Angenommen ich möchte, sollte die Verbindung nicht aufgebaut werden können, ein Fenster mit der Fehlermeldung anzeigen. Wie mache ich das mit der Klasse?

Wäre es sinnvoll, bei einem solchen Fehler eine Ausgabe mit sout() zu machen und true / false zurückzugeben würde JDBC keine Exception werfen.
dowhile is offline  
Old 01/27/2014, 14:01   #3
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Da die Klasse auf einer CLI-Basierenden Anwendung ihre Verwendung nötigte (bzw. deshalb geschrieben wurde), sah ich kein Bedürfnis jetzt extra Message Boxen für die Fehler zu machen/auszugeben, sondern gebe diese einfach in der Konsole aus.
Es ist ja nicht so, dass ich kein Error Handling mache. (Überall wo eine Exception Zustande kommen könnte, wird diese dementsprechend bearbeitet, mit einer Ausgabe)

Außerdem da ich keine Library zur Verfügung stelle sondern nur eine Klasse, kannst du diese deinen Bedürfnissen (darunter auch die Ausgaben etc.) anpassen.
XxharCs is offline  
Old 01/27/2014, 16:53   #4
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Was ist wenn meine Konsolenanwendung den Fehler lieber loggen möchte?

Quote:
sah ich kein Bedürfnis jetzt extra Message Boxen für die Fehler zu machen/auszugeben
Das wäre auch doof. Die Exception aber einfach weiter zugeben, damit der Nutzer deiner Klasse sie ordentlich verarbeiten kann hingegen nicht. Ich meine nur, Ausgaben mit sout() irgendwo im Programme sind fast immer unbrauchbar, dann lieber noch mit Logger. Besser aber - und so ist es ja auch gedacht - die Exception weitergeben wenn man sie an einer Stelle nicht ausreichend genug verarbeiten kann.

Generell, welchen Nutzen hat es, true / false beziehungsweise Wert / null zurückzugeben anstatt einer Exception? Es ist weit weniger flexibel (keine Meldung, nur möglich wenn es einen einzigen Fehler gibt) und produziert eher noch mehr Code als es einspart.

Welchen Vorteil siehst du darin, die Exception zu fangen, eine Ausgabe mit sout() zu machen und dann true / false zurückzugeben?
dowhile is offline  
Old 01/27/2014, 17:37   #5
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Quote:
Originally Posted by dowhile View Post
Welchen Vorteil siehst du darin, die Exception zu fangen, eine Ausgabe mit sout() zu machen und dann true / false zurückzugeben?
Weil wenn zB. wenn eine Verbindung schon steht, ich mich aber nochmal verbinden möchte (DAU - Testing) bekomme ich nur Exceptions etc.
Hier ein Auschnitt meines Programmes, weshalb es einen sehr guten Grund hat, wieso ich dies so angehe.
Code:
private ConnectionLogic cl;
...
...
if(cl.getStatus() == false) {
    if(cl.connect() == true) {
        // do your work here
    }
}
...
...
if(cl.getStatus() == true) {
    cl.disconnect();
}
...

Edit:
Quote:
Originally Posted by dowhile View Post
dann lieber noch mit Logger.
Hmm, die Fehler generell zu loggen, da würd ich auf erster Überlegung nicht kommen..ist eigentlich eine nette Idee!
XxharCs is offline  
Reply


Similar Threads Similar Threads
[Java] Bot connection API
03/21/2015 - SRO Coding Corner - 4 Replies
Hello again, This is a release of my Java connection API, which can be used to connect your bot via a proxy. /** * Class for Silkroad packet transaction via proxy * * @author Vinator * */ public class BotConnection {
Java ArrayList aus abstrakter Klasse gefüllt mit spezifischen Objekten
05/29/2013 - General Coding - 7 Replies
Hallo, Folgende Situation: Ich programmiere grade für mein Studium ein Point & Click Adventure (nach dem Model View Control Prinzip). In dem package Model hab ich nun eine abstrakte Klasse Interac diese spezifizier ich in drei Kinderklassen Item, Navigation und Punkte. Dabei ist Interact die generelle Beschreibung von Objekten mit denen später der User "interagiert" bzw. den User zur aktuellen Beschreibung des Spiels informieren. Ich erstell mir dann jeweils ein Objekt der...
Internal exception:java.net.SocketException: Connection reset
11/02/2012 - Minecraft - 10 Replies
auf meinem server bekomm ich nach 5 min immer diese meldung Internal exception:java.net.SocketException: Connection reset kann mir jemand helfen
[Suche]Java mit MySql
08/19/2012 - General Coding - 4 Replies
Moin Leute, kennt ihr evtl. ein sehr ausführliches Tutorial für MySql und Java so das man diese zwei Verbinden kann? Mein Problem ist das ich mich zwar mit Java auskenne aber noch nie mit MySql gearbeitet hab. Außer manchmal mit PhpmyAdmin an den Datenbanken rum gespielt aber mehr auch nicht. Wenn jemand ein gutes Tutorial hat, wäre ich sehr dankbar wenn er es hier posten könnte. :)
java.net.socket.exception: Connection reset
06/06/2012 - Minecraft - 4 Replies
Hallo . Ich wollt vorhin auf nen server von nem freund und als miecraft verbinden wollte kam erst die meldung "can't reach server" als ich dann trotzdem auf verbinden gedrückt hab kam die meldung aus der überschrift.Weiß jemand woran das liegt vllt an überlastung oder so ?



All times are GMT +2. The time now is 00:12.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.