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 |