Есть вот такой клсс:
public class MySQLConntection {
private static final String HOST = "HOST";
private static final String USERNAME = "BD_name";
private static final String PASSWORD = "bd_pass";
private Connection connection;
public MySQLConntection() {
try {
this.connection = DriverManager.getConnection(HOST,USERNAME,PASSWORD);
} catch (SQLException e) {
System.err.println("Ошибка в подключении к БД");
e.printStackTrace();
}
}
public Connection getConnection() {
return connection;
}
}
Также есть класс, который слушает события сокета по порту в новом потоке(метод run()):
ObjectInputStream inputStream = new ObjectInputStream(this.socket.getInputStream());
ObjectOutputStream outputStream = new ObjectOutputStream(this.socket.getOutputStream());
Ping ping = (Ping) inputStream.readObject(); /// --- это объект которые хранит передаваемые данные
/// event handler
while (true){
if(!ping.isClear()){
switch (ping.getEventId()){
/* event Register */
case 1: {
Ping out = User.registrationUser(ping.getLogin(),ping.getPassword()); //// - здесь регистрируется пользователь, и данные сохраняются в БД.
outputStream.writeObject(out);
break;
}
case 2: {
System.out.println("event 2");
break;
}
}
}
}
Вот код метода:
public static Ping registrationUser(String login, String password) throws SQLException {
Ping ping = new Ping("No error");
Connection connect = new MySQLConntection().getConnection();
Statement st = connect.createStatement();
ResultSet rs = st.executeQuery("SELECT login FROM users");
while (rs.next()){
if(rs.getString(1) == login){
ping.setError("Данный логин уже существует");
}
}
if (ping.getError() == "No error"){
PreparedStatement pr = connect.prepareStatement("INSERT INTO users (login, password) VALUES (?, md5(?))");
pr.setString(1,login);
pr.setString(2,password);
pr.execute();
}
return ping;
}
Ну и суть вопроса в том - когда нужно закрывать соединение с БД и куда лучше запихнуть его? И если будут советы по качеству кода, приму к сведению и отрефакторю)