import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InventoryManagement {
private static final String DB_URL = "jdbc:mysql://localhost:3306/inventory";
private static final String USER = "username";
private static final String PASSWORD = "password";
public static void main(String[] args) {
// 商å“ã®è³¼å…¥æƒ…å ±ï¼ˆä¾‹ã¨ã—ã¦å•†å“IDã¨è³¼å…¥æ•°é‡ã‚’仮定)
int productId = 1;
int purchaseQuantity = 10;
// データベースã¸ã®æŽ¥ç¶š
try (Connection connection = DriverManager.getConnection(DB_URL, USER, PASSWORD)) {
// トランザクションã®é–‹å§‹
connection.setAutoCommit(false);
// 在庫数é‡ã®å–å¾—
int currentStock = getCurrentStock(connection, productId);
// 在庫ãŒè¶³ã‚Šã¦ã„ã‚‹ã‹ç¢ºèª
if (currentStock >= purchaseQuantity) {
// 購入処ç†ã®å®Ÿè¡Œ
updateStock(connection, productId, currentStock - purchaseQuantity);
// トランザクションã®ã‚³ãƒŸãƒƒãƒˆ
connection.commit();
System.out.println("購入ãŒå®Œäº†ã—ã¾ã—ãŸã€‚");
} else {
// 在庫ãŒä¸è¶³ã—ã¦ã„ã‚‹å ´åˆã€ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¨ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®è¡¨ç¤º
connection.rollback();
System.out.println("在庫ãŒä¸è¶³ã—ã¦ã„ã¾ã™ã€‚購入ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private static int getCurrentStock(Connection connection, int productId) throws SQLException {
// 商å“IDã‚’å…ƒã«ç¾åœ¨ã®åœ¨åº«æ•°é‡ã‚’å–å¾—ã™ã‚‹SQLæ–‡
String sql = "SELECT stock FROM products WHERE product_id = ?";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, productId);
// SQLã®å®Ÿè¡Œ
var resultSet = statement.executeQuery();
if (resultSet.next()) {
return resultSet.getInt("stock");
} else {
throw new SQLException("商å“ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚");
}
}
}
private static void updateStock(Connection connection, int productId, int newStock) throws SQLException {
// 商å“IDã‚’å…ƒã«åœ¨åº«æ•°é‡ã‚’æ›´æ–°ã™ã‚‹SQLæ–‡
String sql = "UPDATE products SET stock = ? WHERE product_id = ?";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, newStock);
statement.setInt(2, productId);
// SQLã®å®Ÿè¡Œ
statement.executeUpdate();
}
}
}
mainメソッドã§ã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®é–‹å§‹ã‹ã‚‰çµ‚了ã¾ã§ã®æµã‚Œã‚’記述ã—ã¦ã„ã¾ã™ã€‚try-with-resources文を使用ã—ã¦ã€è‡ªå‹•çš„ã«ã‚¯ãƒãƒ¼ã‚ºã•れるConnectionオブジェクトをå–å¾—ã—ã¾ã™ã€‚getCurrentStockメソッドã¯ã€å•†å“IDã‚’å…ƒã«ç¾åœ¨ã®åœ¨åº«æ•°é‡ã‚’データベースã‹ã‚‰å–å¾—ã—ã¾ã™ã€‚updateStockメソッドã¯ã€å•†å“IDã‚’å…ƒã«åœ¨åº«æ•°é‡ã‚’æ›´æ–°ã—ã¾ã™ã€‚- 購入処ç†ãŒè¡Œã‚れるå‰ã«åœ¨åº«ãŒè¶³ã‚Šã¦ã„ã‚‹ã‹ç¢ºèªã—ã€è¶³ã‚Šã¦ã„ã‚‹å ´åˆã¯è³¼å…¥å‡¦ç†ã‚’実行ã—ã¦ã‚³ãƒŸãƒƒãƒˆã—ã¾ã™ã€‚在庫ãŒä¸è¶³ã—ã¦ã„ã‚‹å ´åˆã¯ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¾ã™ã€‚
ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã§ã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®åˆ¶å¾¡ã«ã‚ˆã‚Šã€è³¼å…¥å‡¦ç†ãŒé€”ä¸ã§å¤±æ•—ã—ãŸå ´åˆã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®çŠ¶æ…‹ãŒä¸€è²«æ€§ã‚’ä¿ã¤ã‚ˆã†ã«ã—ã¦ã„ã¾ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント