Для выполнения SQL запроса на Java и получения данных для автоматического тестирования, можно воспользоваться библиотекой JDBC. Вот пример кода, который показывает как выполнить SELECT запрос и получить результаты:
```java
import java.sql.*;
public class Main {
public static void main(String[] args) {
try {
// Устанавливаем соединение с базой данных
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_name", "username", "password");
// Создаем запрос
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM table_name");
// Обрабатываем результаты запроса
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
// Закрываем соединение
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
Чтобы оптимизировать и исправить код в классе **DataSource**, следует использовать try-with-resources для автоматического закрытия ресурсов. Также рекомендуется использовать PreparedStatement для выполнения SQL запросов, чтобы избежать SQL инъекций. Например, код может быть исправлен следующим образом:
```java
import java.sql.*;
public class DataSource {
private Connection conn;
public DataSource(String url, String username, String password) {
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
public ResultSet executeQuery(String query) {
try {
PreparedStatement stmt = conn.prepareStatement(query);
return stmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public void closeConnection() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
Этот код не только закрывает соединение автоматически, но и защищает от SQL инъекций.