我有兩種方法可以從資料庫中獲取資料。它們僅在請求和回傳型別上有所不同。是否有可能以某種方式將它們組合起來,以便代碼不會重復?
public ObservableList<Car> getAllCars() {
ObservableList<Car> list = FXCollections.observableArrayList();
Connection connection = MyConnection.connection;
String query = "SELECT * FROM cars";
try {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(query);
while (rs.next()) {
Car car = new Car(rs.getInt("ID"), rs.getInt("STYLE_ID"),
rs.getString("MAKE"), rs.getString("MODEL"),
rs.getInt("YEAR"), rs.getInt("PRICE"));
list.add(car);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
}
public ObservableList<Style> getAllStyles() {
ObservableList<Style> list = FXCollections.observableArrayList();
Connection connection = MyConnection.connection;
String query = "SELECT * FROM styles";
try {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(query);
while (rs.next()) {
Style style = new Style(rs.getInt("ID"), rs.getString("NAME"));
list.add(style);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
}
uj5u.com熱心網友回復:
您可以首先撰寫一個函式式介面,該介面表示將 a 轉換ResultSet為某種型別的函式T:
@FunctionalInterface
interface ResultConverter<T> {
T convert(ResultSet resultSet) throws SQLException;
}
然后你可以撰寫一個通用函式,它需要一個ResultConverter<T>:
public <T> ObservableList<T> getAll(ResultConverter<T> converter, String query) {
ObservableList<T> list = FXCollections.observableArrayList();
Connection connection = MyConnection.connection;
try {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(query);
while (rs.next()) {
T t = converter.convert(rs);
list.add(t);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
}
然后您可以將非重復部分留在getAllStylesand 中getAllCars:
// getAllCars:
return getAll(rs -> new Car(rs.getInt("ID"), rs.getInt("STYLE_ID"),
rs.getString("MAKE"), rs.getString("MODEL"),
rs.getInt("YEAR"), rs.getInt("PRICE")),
"SELECT * FROM cars");
// getAllStyles:
return getAll(rs -> new Style(rs.getInt("ID"), rs.getString("NAME")),
"SELECT * FROM styles");
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/348423.html
