JDBC Datenbank-Anbindung mit Properties für MySQL

In meinem Blog habe ich bereits gezeigt, wie man eine Verbindung zu einer MySQL-Datenbank via JDBC aufbauen kann (siehe [post id=3219]Connecting to a MySQL Database with Java (JDBC)[/post]).

In dem dort vorgestelltem Code-Beispiel wurden die Datenbankdetails (Hostname, Port, Datenbankname, Benutzername und Passwort) fest im Code eingetragen. Möchte man eine andere Datenbank verwenden, muss man den Code ändern und neu kompilieren. Das ist nicht sehr stilvoll. Schöner wäre es, wenn diese Infromationen aus einer externen Konfigurationsdatei geladen werden, so dass man nur diese Datei mit einem Texteditor öffnen muss, um die Daten zu ändern. Für diesen Zweck lassen sich Properties einsetzen.

Wie das geht, zeige ich in folgendem Beispiel.

Properties-Datei anlegen

src/main/resources/settings.properties

db.host=localhost
db.port=3306
db.name=foo4
db.user=root
db.password=root

Properties-Datei einlesen und für JDBC-Verbindung verwenden

DatabaseHandler.java

package de.tutorials.jdbc;
 
import de.tutorials.model.Category;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class DatabaseHandler {
 
  private Connection connection = null;
  private boolean isConnected = false;
 
  public boolean connect() {
    if (!isConnected) {
      try {
        // Read properties
        InputStream in = this.getClass().getResourceAsStream("/settings.properties");
        Properties properties = new Properties();
        properties.load(in);
        in.close();
        // Assign properties
        String dbHost = properties.getProperty("db.host");
        String dbPort = properties.getProperty("db.port");
        String dbName = properties.getProperty("db.name");
        String dbUser = properties.getProperty("db.user");
        String dbPassword = properties.getProperty("db.password");
        // Connect to database
        String connectionURL = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName;
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection(connectionURL, dbUser, dbPassword);
        isConnected = true;
      } catch (Exception ex) {
        Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);
      }
    }
    return isConnected;
  }
 
  public void disconnect() {
    try {
      connection.close();
    } catch (SQLException ex) {
      Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
 
  public void saveCategory(Category category) {
    PreparedStatement ps = null;
    try {
      ps = connection.prepareStatement("insert into categories (title) values (?)");
      ps.setString(1, category.getTitle());
      int rowsUpdated = ps.executeUpdate();
      System.out.println("Rows updated: " + rowsUpdated);
    } catch (Exception ex) {
      Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
      // Releasing all resources to avoid message from server: "Too many connections"
      try {
        ps.close();
      } catch (SQLException ex) {
        Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);
      }
      try {
        connection.close();
      } catch (SQLException ex) {
        Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);
      }
    }
  }
}

Eine MySQL-JDBC Driver Connection URL kann übrigens wie folgt aussehen:

String connectionURL = "jdbc:mysql://localhost:3306/your-database/?user=admin&password=secret

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.