/**
* ドメイン非依存URL出力フィルタ
* javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい
*
* データベースには絶対URL(https://minner.asia)を保持し、
* 表示時に現在のドメイン(home_url())に動的変換する
*/
function javadrill_make_urls_dynamic($content) {
if (empty($content)) {
return $content;
}
// データベース内の絶対URLを現在のhome_url()に置換
$old_url = 'https://minner.asia';
$new_url = untrailingslashit(home_url());
// http版も対応(念のため)
$content = str_replace($old_url, $new_url, $content);
$content = str_replace('http://minner.asia', $new_url, $content);
return $content;
}
// 投稿本文、ウィジェット、タームの説明、抜粋に適用
add_filter('the_content', 'javadrill_make_urls_dynamic', 20);
add_filter('widget_text', 'javadrill_make_urls_dynamic', 20);
add_filter('term_description', 'javadrill_make_urls_dynamic', 20);
add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20);
FileWriter を使用ã—ã¦ãƒ•ァイルã«ãƒ†ã‚ストを書ãè¾¼ã¿ã¾ã™ã€‚
import java.io.FileWriter;
import java.io.IOException;
public class FileReadWriteExample {
public static void main(String[] args) {
String filePath = "example.txt";
try {
// ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³é–‹å§‹
writeToFile(filePath, "Hello, World!");
// ファイルã¸ã®æ›¸ãè¾¼ã¿ãŒæˆåŠŸã—ãŸå ´åˆã®å‡¦ç†
System.out.println("ファイルã¸ã®æ›¸ãè¾¼ã¿ãŒæˆåŠŸã—ã¾ã—ãŸã€‚");
} catch (IOException e) {
// ファイルã¸ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã®å‡¦ç†
System.out.println("ファイルã¸ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚");
e.printStackTrace();
// トランザクションã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯
// ã“ã“ã§åˆ¥ã®ä¾‹å¤–処ç†ã‚„ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã®ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
}
}
private static void writeToFile(String filePath, String content) throws IOException {
// ファイルを書ã込む際ã«ç™ºç”Ÿã™ã‚‹ä¾‹å¤–ã‚’ã‚ャッãƒã—ã¦ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã™ã‚‹
try (FileWriter writer = new FileWriter(filePath)) {
writer.write(content);
}
}
}
ã“ã®ä¾‹ã§ã¯ã€FileWriter ã§ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ã‚’行ã„ã¾ã™ã€‚writeToFile メソッド内ã§ãƒ•ァイルã¸ã®æ›¸ãè¾¼ã¿ãŒè¡Œã‚れã€ã‚‚ã—IOException ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã¯ã€ãれをã‚ャッãƒã—ã¦ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã¾ã™ã€‚ã“れã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ãŒå¤±æ•—ã—ãŸå ´åˆã«å®Ÿè¡Œã•れるエラーãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã®ä¸€ä¾‹ã§ã™ã€‚
ファイル処ç†ã«ãŠã‘るトランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨åŒã˜ã‚ˆã†ãªè€ƒãˆæ–¹ã‚’é©ç”¨ã™ã‚‹ã‚‚ã®ã§ã€ç‰¹å®šã®ä¸€é€£ã®æ“作ãŒã¾ã¨ã¾ã‚Šã¨ã—ã¦æ‰±ã‚れã€ãã‚Œã‚‰ã®æ“作ãŒå…¨ã¦æˆåŠŸã—ãŸå ´åˆã«å¤‰æ›´ã‚’確定ã•ã›ã€é€”ä¸ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã¯å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ã¨ã„ã†ä»•組ã¿ã§ã™ã€‚
以下ã«ã€Javaを使用ã—ãŸç°¡å˜ãªãƒ•ァイル処ç†ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’模擬ã™ã‚‹ä¾‹ã‚’示ã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ãƒ•ァイルã¸ã®æ›¸ãè¾¼ã¿ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹å§‹ã—ã€æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã™ã‚‹ä»®æƒ³çš„ãªæ¦‚念をå–り入れã¦ã„ã¾ã™ã€‚
import java.io.FileWriter;
import java.io.IOException;
public class FileTransactionExample {
public static void main(String[] args) {
String filePath = "example.txt";
// ファイルã¸ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³é–‹å§‹
try (FileTransaction transaction = new FileTransaction(filePath)) {
// ファイルã¸ã®æ›¸ãè¾¼ã¿
transaction.writeToFile("Hello, World!");
// トランザクションã®ã‚³ãƒŸãƒƒãƒˆï¼ˆæ£å¸¸çµ‚了)
transaction.commit();
} catch (IOException e) {
// トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã®å‡¦ç†
System.out.println("トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚");
e.printStackTrace();
}
}
private static class FileTransaction implements AutoCloseable {
private final String filePath;
private boolean committed;
public FileTransaction(String filePath) {
this.filePath = filePath;
this.committed = false;
}
public void writeToFile(String content) throws IOException {
// ファイルã¸ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã‚’考慮ã—ãŸå‡¦ç†
// (例ãˆã°ã€ãƒ•ァイルãŒå˜åœ¨ã—ãªã„å ´åˆã‚„書ãè¾¼ã¿æ¨©é™ãŒãªã„å ´åˆï¼‰
try (FileWriter writer = new FileWriter(filePath)) {
writer.write(content);
}
}
public void commit() {
committed = true;
}
@Override
public void close() throws IOException {
// トランザクションã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†
if (!committed) {
System.out.println("トランザクションãŒãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã•れã¾ã—ãŸã€‚");
// ファイルã®å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ãŸã‚ã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†ã‚’ã“ã“ã«è¿½åŠ ã™ã‚‹
}
}
}
}
FileTransaction クラスã®å½¹å‰²:
private static class FileTransaction implements AutoCloseable {
private final String filePath;
private boolean committed;
// コンストラクタ
public FileTransaction(String filePath) {
this.filePath = filePath;
this.committed = false;
}
}
トランザクション内ã®ãƒ•ァイル書ãè¾¼ã¿:
public void writeToFile(String content) throws IOException {
try (FileWriter writer = new FileWriter(filePath)) {
writer.write(content);
}
}
トランザクションã®ã‚³ãƒŸãƒƒãƒˆ:
public void commit() {
committed = true;
}
トランザクションã®ã‚¯ãƒãƒ¼ã‚º (AutoCloseable インターフェース):
@Override
public void close() throws IOException {
// トランザクションã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†
if (!committed) {
// ファイルã®å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ãŸã‚ã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†ã‚’ã“ã“ã«è¿½åŠ ã™ã‚‹
}
}
トランザクションã®åˆ©ç”¨:
main メソッドã§ã¯ã€try-with-resources 文を使用ã—ã¦ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹å§‹ã—ã€ãƒ•ァイルã¸ã®æ›¸ãè¾¼ã¿ã‚’行ã„ã¾ã™ã€‚ã“ã®ã¨ãã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã¨ã€FileTransaction クラス㮠close メソッドãŒå‘¼ã°ã‚Œã€ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†ãŒè¡Œã‚れã¾ã™ã€‚
try (FileTransaction transaction = new FileTransaction(filePath)) {
// ファイルã¸ã®æ›¸ãè¾¼ã¿
transaction.writeToFile("Hello, World!");
// トランザクションã®ã‚³ãƒŸãƒƒãƒˆï¼ˆæ£å¸¸çµ‚了)
transaction.commit();
} catch (IOException e) {
// トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã®å‡¦ç†
System.out.println("トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚");
e.printStackTrace();
}
ã“ã®ã‚ˆã†ã«ã€ãƒ•ァイル処ç†ã«ãŠã‘るトランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«å¤‰æ›´ã‚’å–り消ã™ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’æä¾›ã—ã€ãƒ‡ãƒ¼ã‚¿ã®æ•´åˆæ€§ã‚’ç¶æŒã—ã¾ã™ã€‚ãŸã ã—ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ã¯ç•°ãªã‚Šã€ãƒ•ァイル処ç†ã«ãŠã„ã¦ã¯æ°¸ç¶šæ€§ãªã©ãŒç›´æŽ¥çš„ã«æä¾›ã•れãªã„ã“ã¨ã«ç•™æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ァイル処ç†ã«ãŠã‘るトランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ã€ãƒ‡ãƒ¼ã‚¿æ•´åˆæ€§ã¨ã‚¨ãƒ©ãƒ¼å‡¦ç†ã®é¢ã§é‡è¦ãªæ¦‚念ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ•ァイルã¸ã®å¤‰æ›´ãŒé€”ä¸ã§ã‚¨ãƒ©ãƒ¼ã‚’引ãèµ·ã“ã—ãŸå ´åˆã§ã‚‚ã€ãƒ‡ãƒ¼ã‚¿ãŒçŸ›ç›¾ã›ãšã€å®‰å…¨ã«å¾©å…ƒã§ãã‚‹ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ãŒæä¾›ã•れã¾ã™ã€‚
é‡è¦ãªãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦ã€ãƒ•ァイル処ç†ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ã¯ç•°ãªã‚Šã€ãƒ‡ãƒ¼ã‚¿ã®æ°¸ç¶šæ€§ãŒç›´æŽ¥çš„ã«ã‚µãƒãƒ¼ãƒˆã•れãªã„ã“ã¨ãŒæŒ™ã’られã¾ã™ã€‚ãã®ãŸã‚ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®ç¯„囲内ã§ã®å¤‰æ›´ã¯ã€ã‚¢ãƒ—リケーション内ã§ã®ã¿å½±éŸ¿ã‚’åŠã¼ã—ã¾ã™ã€‚
トランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’利用ã™ã‚‹ã“ã¨ã§ã€ãƒ•ァイル処ç†ã«ãŠã„ã¦ã‚‚ä¿¡é ¼æ€§ã®é«˜ã„データ管ç†ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚エラーã¸ã®æŸ”軟ãªå¯¾å¿œã‚„ãƒ‡ãƒ¼ã‚¿æ•´åˆæ€§ã®ç¢ºä¿ã¯ã€å …牢ã§å®‰å…¨ãªãƒ•ァイル処ç†ã‚¢ãƒ—リケーションを構築ã™ã‚‹ä¸Šã§ä¸å¯æ¬ ãªã‚¹ã‚ルã¨ãªã‚Šã¾ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ファイルã®èªã¿æ›¸ãã‚’ä¼´ã†ãƒ—ãƒã‚°ãƒ©ãƒ を作æˆã—ã¾ã™ã€‚ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ãã ã•ã„。
try-with-resources 文を使用ã—ã¦ã€ãƒ•ァイルリソースを確実ã«ã‚¯ãƒãƒ¼ã‚ºã—ã¾ã™ã€‚IOExceptionï¼‰ã‚’æ•æ‰ã—ã¦ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã¾ã™ã€‚ã“れらã®åŸºæœ¬çš„ãªæ‰‹é †ã«å¾“ã£ã¦ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を実装ã§ãã¾ã™ã€‚
→解ç”例
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class MultiTableTransactionExample {
// ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹æŽ¥ç¶šæƒ…å ±
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/your_database";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(JDBC_URL, USER, PASSWORD)) {
// トランザクション開始
connection.setAutoCommit(false);
try {
// テーブル1ã®å¤‰æ›´
updateTable1(connection);
// テーブル2ã®å¤‰æ›´
updateTable2(connection);
// ã™ã¹ã¦ã®å¤‰æ›´ãŒæˆåŠŸã—ãŸå ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’コミット
connection.commit();
System.out.println("ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ãŒæ£å¸¸ã«å®Œäº†ã—ã¾ã—ãŸã€‚");
} catch (SQLException e) {
// 何ã‹ã—らã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯
connection.rollback();
System.err.println("トランザクションãŒãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã•れã¾ã—ãŸã€‚エラー: " + e.getMessage());
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void updateTable1(Connection connection) throws SQLException {
// テーブル1ã®å¤‰æ›´å‡¦ç†
String sql = "UPDATE table1 SET column1 = ? WHERE id = ?";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
// パラメータをセット
preparedStatement.setString(1, "new_value");
preparedStatement.setInt(2, 1);
// 実行
preparedStatement.executeUpdate();
} catch (SQLException e) {
// テーブル1ã®å¤‰æ›´ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆ
throw new SQLException("テーブル1ã®å¤‰æ›´ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚", e);
}
}
private static void updateTable2(Connection connection) throws SQLException {
// テーブル2ã®å¤‰æ›´å‡¦ç†
String sql = "UPDATE table2 SET column1 = ? WHERE id = ?";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
// パラメータをセット
preparedStatement.setString(1, "new_value");
preparedStatement.setInt(2, 1);
// 実行(ã“ã“ã§ã¯æ•¢ãˆã¦ã‚¨ãƒ©ãƒ¼ã‚’発生ã•ã›ã‚‹ï¼‰
preparedStatement.executeUpdate();
} catch (SQLException e) {
// テーブル2ã®å¤‰æ›´ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆ
throw new SQLException("テーブル2ã®å¤‰æ›´ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚", e);
}
}
}
ã“ã®ä¾‹ã§ã¯ã€updateTable1メソッドã¨updateTable2メソッドãŒãれãžã‚Œç•°ãªã‚‹ãƒ†ãƒ¼ãƒ–ルã®å¤‰æ›´ã‚’担当ã—ã¦ã„ã¾ã™ã€‚トランザクション内ã§ã®ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿæ™‚ã«ã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å…¨ä½“ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã¦ã„ã¾ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
データベース内ã®è¤‡æ•°ã®ãƒ†ãƒ¼ãƒ–ルã«å¤‰æ›´ã‚’åŠ ãˆã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を作æˆã—ã¾ã™ã€‚一部ã®ãƒ†ãƒ¼ãƒ–ルã§ã®å¤‰æ›´ãŒæˆåŠŸã—ã€ä»–ã®ãƒ†ãƒ¼ãƒ–ルã§ã®å¤‰æ›´ãŒå¤±æ•—ã—ãŸå ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ãã ã•ã„。
ã“れらã®ãƒã‚¤ãƒ³ãƒˆã‚’考慮ã—ã¦ã€è¤‡æ•°ã®ãƒ†ãƒ¼ãƒ–ルã«å¤‰æ›´ã‚’åŠ ãˆã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を作æˆã—ã¦ãã ã•ã„。
→解ç”例
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ReservationProgram {
// ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹æŽ¥ç¶šæƒ…å ±
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/reservation_db";
private static final String USER = "username";
private static final String PASSWORD = "password";
// 予約を行ã†ãƒ¡ã‚½ãƒƒãƒ‰
public void makeReservation(String facility, String dateTime) {
try (Connection connection = DriverManager.getConnection(JDBC_URL, USER, PASSWORD)) {
// トランザクションã®é–‹å§‹
connection.setAutoCommit(false);
// 予約ã®é‡è¤‡ãƒã‚§ãƒƒã‚¯
if (!isReservationAvailable(connection, facility, dateTime)) {
// 予約ãŒé‡è¤‡ã—ã¦ã„ã‚‹å ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯
connection.rollback();
System.out.println("予約ãŒé‡è¤‡ã—ã¦ã„ã¾ã™ã€‚");
return;
}
// 予約をデータベースã«ç™»éŒ²
insertReservation(connection, facility, dateTime);
// トランザクションã®ã‚³ãƒŸãƒƒãƒˆ
connection.commit();
System.out.println("予約ãŒå®Œäº†ã—ã¾ã—ãŸã€‚");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 予約ã®é‡è¤‡ãƒã‚§ãƒƒã‚¯ã‚’行ã†ãƒ¡ã‚½ãƒƒãƒ‰
private boolean isReservationAvailable(Connection connection, String facility, String dateTime)
throws SQLException {
String sql = "SELECT COUNT(*) FROM reservations WHERE facility = ? AND date_time = ?";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, facility);
preparedStatement.setString(2, dateTime);
// 予約ãŒã‚ã‚‹å ´åˆã¯ false ã‚’è¿”ã™
return preparedStatement.executeQuery().getInt(1) == 0;
}
}
// 予約をデータベースã«ç™»éŒ²ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
private void insertReservation(Connection connection, String facility, String dateTime)
throws SQLException {
String sql = "INSERT INTO reservations (facility, date_time) VALUES (?, ?)";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, facility);
preparedStatement.setString(2, dateTime);
preparedStatement.executeUpdate();
}
}
public static void main(String[] args) {
ReservationProgram reservationProgram = new ReservationProgram();
reservationProgram.makeReservation("Conference Room A", "2023-01-01 14:00");
}
}
makeReservation メソッド内ã§ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹å§‹ã—ã€äºˆç´„ã®é‡è¤‡ãƒã‚§ãƒƒã‚¯ã‚’行ã„ã¾ã™ã€‚isReservationAvailable ãƒ¡ã‚½ãƒƒãƒ‰ã§æŒ‡å®šã•ã‚ŒãŸæ–½è¨ã¨æ—¥æ™‚ã«æ—¢ã«äºˆç´„ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚insertReservation ãƒ¡ã‚½ãƒƒãƒ‰ã§æ–°ã—ã„予約をデータベースã«ç™»éŒ²ã—ã¾ã™ã€‚「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ユーザーãŒã‚¤ãƒ™ãƒ³ãƒˆã‚„æ–½è¨ã‚’予約ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を作æˆã—ã¦ãã ã•ã„。予約ãŒé‡è¤‡ã—ã¦ã„ã‚‹å ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ãã ã•ã„。
ä¸Šè¨˜ã®æ‰‹é †ã‚’å‚考ã«ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã¨äºˆç´„ã®é‡è¤‡ãƒã‚§ãƒƒã‚¯ã‚’行ã†ãƒ—ãƒã‚°ãƒ©ãƒ を作æˆã§ãã¾ã™ã€‚データベースã®ã‚¹ã‚ーマや使用ã™ã‚‹è¨€èªžã«ã‚ˆã£ã¦å…·ä½“çš„ãªå®Ÿè£…ãŒç•°ãªã‚Šã¾ã™ãŒã€ä¸€èˆ¬çš„ãªæµã‚Œã¯ä¸Šè¨˜ã®é€šã‚Šã§ã™ã€‚
→解ç”例
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
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ã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
商å“ã®åœ¨åº«ã‚’管ç†ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を作æˆã—ã¾ã™ã€‚商å“ã®è³¼å…¥ãŒè¡Œã‚れãŸå ´åˆã€è³¼å…¥æ•°é‡ãŒåœ¨åº«æ•°é‡ã‚’è¶…ãˆã‚‹å ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ãã ã•ã„。
トランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã®åˆ©ç”¨ã¯ã€ãƒ‡ãƒ¼ã‚¿ã®æ•´åˆæ€§ã‚’確ä¿ã™ã‚‹é‡è¦ãªæ‰‹æ®µã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚·ã‚¹ãƒ†ãƒ ãŒä¸€è²«æ€§ã‚’æŒã¡ã€ç•°å¸¸ãªçŠ¶æ…‹ãŒç™ºç”Ÿã—ãŸå ´åˆã«ãƒ‡ãƒ¼ã‚¿ãŒç ´æã™ã‚‹ã“ã¨ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚
→解ç”例
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
try-with-resources 文を使用ã—ã¦ç¢ºå®Ÿã«ã‚¯ãƒãƒ¼ã‚ºã•れるよã†ã«ã—ã¾ã™ã€‚
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
// カスタム例外クラス
class InsufficientFundsException extends Exception {
public InsufficientFundsException(String message) {
super(message);
}
}
public class BankTransactionExample {
private static final String DB_URL = "jdbc:mysql://localhost:3306/bank";
private static final String DB_USER = "your_username";
private static final String DB_PASSWORD = "your_password";
// 銀行å–引メソッド
public static void transferFunds(int fromAccount, int toAccount, double amount) throws SQLException, InsufficientFundsException {
// データベースã¸ã®æŽ¥ç¶š
try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) {
// トランザクションã®é–‹å§‹
connection.setAutoCommit(false);
// é€é‡‘å…ƒã®æ®‹é«˜å–å¾—
double balance = getAccountBalance(connection, fromAccount);
// 残高ãŒå分ã‹ç¢ºèª
if (balance < amount) {
// 残高ä¸è¶³ã®å ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—例外をスãƒãƒ¼
connection.rollback();
throw new InsufficientFundsException("é€é‡‘å…ƒã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ®‹é«˜ãŒä¸è¶³ã—ã¦ã„ã¾ã™ã€‚");
}
// é€é‡‘元アカウントã‹ã‚‰å¼•ãè½ã¨ã—
updateAccountBalance(connection, fromAccount, balance - amount);
// é€é‡‘先アカウントã«å…¥é‡‘
updateAccountBalance(connection, toAccount, getAccountBalance(connection, toAccount) + amount);
// トランザクションをコミット
connection.commit();
}
}
// 指定ã•れãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ®‹é«˜ã‚’å–å¾—ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
private static double getAccountBalance(Connection connection, int accountNumber) throws SQLException {
String query = "SELECT balance FROM accounts WHERE account_number = ?";
try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
preparedStatement.setInt(1, accountNumber);
var resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
return resultSet.getDouble("balance");
}
throw new SQLException("アカウントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。");
}
}
// 指定ã•れãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ®‹é«˜ã‚’æ›´æ–°ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
private static void updateAccountBalance(Connection connection, int accountNumber, double newBalance) throws SQLException {
String query = "UPDATE accounts SET balance = ? WHERE account_number = ?";
try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
preparedStatement.setDouble(1, newBalance);
preparedStatement.setInt(2, accountNumber);
int affectedRows = preparedStatement.executeUpdate();
if (affectedRows == 0) {
throw new SQLException("アカウントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。");
}
}
}
public static void main(String[] args) {
try {
// ユーザーãŒã‚¢ã‚«ã‚¦ãƒ³ãƒˆé–“ã§è³‡é‡‘を移動ã™ã‚‹ä¾‹
transferFunds(123456, 789012, 1000.0);
System.out.println("å–å¼•ãŒæˆåŠŸã—ã¾ã—ãŸã€‚");
} catch (SQLException | InsufficientFundsException e) {
System.err.println("å–引エラー: " + e.getMessage());
}
}
}
ã“ã®ä¾‹ã§ã¯ã€InsufficientFundsException ãŒé€é‡‘å…ƒã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ®‹é«˜ä¸è¶³æ™‚ã«ã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚トランザクションã®ç®¡ç†ãŒé‡è¦ã§ã‚ã‚Šã€æ®‹é«˜ãŒå分ã§ãªã„å ´åˆã¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€å¤‰æ›´ã‚’å…ƒã«æˆ»ã—ã¾ã™ã€‚
トランザクションã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ä¸€é€£ã®æ“作をæ„味ã—ã¾ã™ã€‚ã“ã‚Œã‚‰ã®æ“作ã¯ã€æˆåŠŸã™ã‚‹ã‹å¤±æ•—ã™ã‚‹ã‹ã®ã„ãšã‚Œã‹ã§ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å…¨ä½“ãŒåŽŸåæ€§ã‚’æŒã¡ã¾ã™ã€‚åŽŸåæ€§ã¨ã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ãŒå…¨ä½“ã¨ã—ã¦æˆåŠŸã™ã‚‹ã‹ã€å…¨ä½“ã¨ã—ã¦å¤±æ•—ã™ã‚‹ã‹ã®ã„ãšã‚Œã‹ã§ã‚ã‚‹ã“ã¨ã‚’指ã—ã¾ã™ã€‚åŽŸåæ€§ãŒä¿ãŸã‚Œãªã„å ´åˆã€é€”ä¸ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¦ã‚‚トランザクションã®ä¸€éƒ¨ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«å¤‰æ›´ã‚’åŠ ãˆãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
トランザクションã®ç®¡ç†ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹æŽ¥ç¶šã‚’使用ã—ã¦è¡Œã„ã¾ã™ã€‚トランザクションã¯é€šå¸¸ã€ä»¥ä¸‹ã®æ‰‹é †ã§å®Ÿè¡Œã•れã¾ã™ã€‚
トランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ä¸€è²«æ€§ã‚’ä¿ã¤ãŸã‚ã«éžå¸¸ã«é‡è¦ã§ã™ã€‚トランザクション内ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã€ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’行ã†ã“ã¨ã§ã€å¤‰æ›´ã‚’å–り消ã—ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’å‰ã®çŠ¶æ…‹ã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ‡ãƒ¼ã‚¿ã®æ•´åˆæ€§ãŒä¿ãŸã‚Œã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒä¿¡é ¼æ€§ã‚’ç¶æŒã—ã¾ã™ã€‚
サンプルプãƒã‚°ãƒ©ãƒ ã§ã¯ã€transferFunds メソッド内ã§ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ãŒé–‹å§‹ã•ã‚Œã€æˆåŠŸã™ã‚‹ã‹å¤±æ•—ã™ã‚‹ã‹ãŒåˆ¤æ–ã•れã¦ã„ã¾ã™ã€‚残高ä¸è¶³ã®å ´åˆã€InsufficientFundsException ãŒã‚¹ãƒãƒ¼ã•れã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ãŒãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã•れã¾ã™ã€‚ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ connection.rollback() ã§è¡Œã„ã¾ã™ã€‚
try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) {
// トランザクションã®é–‹å§‹
connection.setAutoCommit(false);
// é€é‡‘å…ƒã®æ®‹é«˜å–å¾—
double balance = getAccountBalance(connection, fromAccount);
// 残高ãŒå分ã‹ç¢ºèª
if (balance < amount) {
// 残高ä¸è¶³ã®å ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—例外をスãƒãƒ¼
connection.rollback();
throw new InsufficientFundsException("é€é‡‘å…ƒã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ®‹é«˜ãŒä¸è¶³ã—ã¦ã„ã¾ã™ã€‚");
}
// ...(以下略)
// トランザクションをコミット
connection.commit();
}
ã“ã®ã‚ˆã†ã«ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’使用ã™ã‚‹ã“ã¨ã§ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ä¸€è²«æ€§ã‚’確ä¿ã—ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«é©åˆ‡ã«å¯¾å‡¦ã§ãã¾ã™ã€‚
トランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹å‡¦ç†ã«ãŠã„ã¦æ¬ ã‹ã›ãªã„概念ã§ã‚りã€ãƒ‡ãƒ¼ã‚¿ã®æ•´åˆæ€§ã‚„ä¿¡é ¼æ€§ã‚’ç¢ºä¿ã™ã‚‹ãŸã‚ã«é‡è¦ãªå½¹å‰²ã‚’æžœãŸã—ã¾ã™ã€‚トランザクションã¯ä¸€é€£ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹æ“作を原åçš„ã«ã¾ã¨ã‚ã€å…¨ä½“ãŒæˆåŠŸã™ã‚‹ã‹å¤±æ•—ã™ã‚‹ã‹ã‚’ä¿è¨¼ã—ã¾ã™ã€‚ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å†…ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«å¤‰æ›´ã‚’å–り消ã—ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’å‰ã®çŠ¶æ…‹ã«æˆ»ã—ã¾ã™ã€‚
データベースå–引ã«ãŠã„ã¦ã¯ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã®ç†è§£ã¨é©åˆ‡ãªåˆ©ç”¨ãŒä¸å¯æ¬ ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒä¸€è²«æ€§ã‚’ä¿ã¡ã€ã‚·ã‚¹ãƒ†ãƒ ãŒä¿¡é ¼æ€§ã‚’確ä¿ã§ãã¾ã™ã€‚
é©åˆ‡ãªãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ç®¡ç†ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹å‡¦ç†ã®å®‰å®šæ€§ã¨ä¿¡é ¼æ€§ã«ç›´çµã—ã€é–‹ç™ºè€…ãŒã‚·ã‚¹ãƒ†ãƒ 全体ã®ä¸€è²«æ€§ã‚’ç¶æŒã§ãるよã†ã‚µãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ユーザーãŒã‚¢ã‚«ã‚¦ãƒ³ãƒˆé–“ã§è³‡é‡‘を移動ã™ã‚‹éŠ€è¡Œå–引プãƒã‚°ãƒ©ãƒ を作æˆã—ã¦ãã ã•ã„。ãŸã ã—ã€é€é‡‘å…ƒã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ååˆ†ãªæ®‹é«˜ãŒãªã„å ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€é©åˆ‡ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ãã ã•ã„。
ã“れらã®ãƒ’ントを元ã«ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å‡¦ç†ã®æµã‚Œã‚’考ãˆã¦ã¿ã¦ãã ã•ã„。
→解ç”例
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™