How about using a factory default with getters and setters?
public class MySqlConnectionFactory {
private String host;
private int porta;
private String database;
private String usuario;
private String senha;
public MySqlConnectionFactory() {
}
public MySqlConnectionFactory(String host, int porta, String database, String usuario, String senha) {
this.host = host;
this.porta = porta;
this.database = database;
this.usuario = usuario;
this.senha = senha;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPorta() {
return porta;
}
public void setPorta(int porta) {
this.porta = porta;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Connection criarConexao() {
if (host == null) throw new IllegalStateException("O host não foi definido.");
if (porta == 0) throw new IllegalStateException("A porta não foi definida.");
if (database == null) throw new IllegalStateException("O database não foi definido.");
if (usuario == null) throw new IllegalStateException("O usuário não foi definido.");
if (senha == null) throw new IllegalStateException("A senha não foi definida.");
try {
return DriverManager.getConnection("jdbc:mysql://" + host + ":" + porta + "/" + database, usuario, senha);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
Or if you prefer, use the default builder:
public class MySqlConnectionBuilder {
private final String host;
private final int porta;
private final String database;
private final String usuario;
private final String senha;
public MySqlConnectionBuilder() {
this(null, 0, null, null, null);
}
public MySqlConnectionBuilder(String host, int porta, String database, String usuario, String senha) {
this.host = host;
this.porta = porta;
this.database = database;
this.usuario = usuario;
this.senha = senha;
}
public String getHost() {
return host;
}
public MySqlConnectionBuilder withHost(String newHost) {
return new MySqlConnectionBuilder(newHost, porta, database, usuario, senha);
}
public int getPorta() {
return porta;
}
public MySqlConnectionBuilder withPorta(int novaPorta) {
return new MySqlConnectionBuilder(host, novaPorta, database, usuario, senha);
}
public String getDatabase() {
return database;
}
public MySqlConnectionBuilder withDatabase(String newDatabase) {
return new MySqlConnectionBuilder(host, porta, newDatabase, usuario, senha);
}
public String getUsuario() {
return usuario;
}
public MySqlConnectionBuilder withUsuario(String novoUsuario) {
return new MySqlConnectionBuilder(host, porta, database, novoUsuario, senha);
}
public String getSenha() {
return senha;
}
public MySqlConnectionBuilder withSenha(String novaSenha) {
return new MySqlConnectionBuilder(host, porta, database, usuario, novaSenha);
}
public Connection criarConexao() {
if (host == null) throw new IllegalStateException("O host não foi definido.");
if (porta == 0) throw new IllegalStateException("A porta não foi definida.");
if (database == null) throw new IllegalStateException("O database não foi definido.");
if (usuario == null) throw new IllegalStateException("O usuário não foi definido.");
if (senha == null) throw new IllegalStateException("A senha não foi definida.");
try {
return DriverManager.getConnection("jdbc:mysql://" + host + ":" + porta + "/" + database, usuario, senha);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}