{"id":586,"date":"2024-11-12T15:59:52","date_gmt":"2024-11-12T06:59:52","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=586"},"modified":"2025-03-24T08:53:02","modified_gmt":"2025-03-23T23:53:02","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91java%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e9%80%a3%e6%90%ba%e3%81%ae%e5%9f%ba%e6%9c%ac%e3%81%8b%e3%82%89%e5%ae%9f%e8%b7%b5%e3%81%be","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=586","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Java\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306e\u57fa\u672c\u304b\u3089\u5b9f\u8df5\u307e\u3067 &#8211; 7\u3064\u306e\u5b9f\u88c5\u624b\u6cd5"},"content":{"rendered":"<div id=\"sgb-css-id-1\">\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">\u306f\u3058\u3081\u306b<\/a>  <\/li>  <li>    <a href=\"#i-1\">\uff11. Java\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-2\">1.1 JDBC\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u672c\u6982\u5ff5<\/a>      <\/li>      <li>        <a href=\"#i-5\">1.2 \u4e3b\u8981\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u88fd\u54c1\u3068\u306e\u76f8\u6027\u6bd4\u8f03<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">1.3 \u74b0\u5883\u69cb\u7bc9\u306e\u5177\u4f53\u7684\u306a\u624b\u9806<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">\uff12. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">2.1 JDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-15\">2.2 Connection\u78ba\u7acb\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">2.3 \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u5316<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-22\">\uff13. \u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-23\">3.1 SELECT\u6587\u306b\u3088\u308b\u5b89\u5168\u306a\u30c7\u30fc\u30bf\u53d6\u5f97\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-26\">3.2 INSERT\/UPDATE\/DELETE\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-28\">3.3 PreparedStatement\u3092\u4f7f\u7528\u3057\u305fSQL\u5b9f\u884c<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-31\">\uff14. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-32\">4.1 SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-35\">4.2 \u8a8d\u8a3c\u60c5\u5831\u306e\u5b89\u5168\u306a\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-38\">4.3 \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u91cd\u8981\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-40\">\uff15. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-41\">5.1 \u30af\u30a8\u30ea\u5b9f\u884c\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-44\">5.2 \u30d0\u30c3\u30c1\u51e6\u7406\u306b\u3088\u308b\u51e6\u7406\u52b9\u7387\u306e\u5411\u4e0a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-46\">5.3 \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-49\">\uff16. \u5b9f\u8df5\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-50\">6.1 \u3088\u304f\u3042\u308b\u63a5\u7d9a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-53\">6.2 \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u767a\u751f\u6642\u306e\u5bfe\u51e6\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-55\">6.3 \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u9632\u6b62\u306e\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-58\">\uff17. \u767a\u5c55\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u624b\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-59\">7.1 ORM\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-62\">7.2 NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-64\">7.3 \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306b\u304a\u3051\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-67\">\u307e\u3068\u3081\u3068\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/a>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u306f\u3058\u3081\u306b<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-2\">\n<p>Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306f\u6700\u3082\u91cd\u8981\u306a\u5b9f\u88c5\u306e\u4e00\u3064\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5358\u7d14\u306aCRUD\u64cd\u4f5c\u304b\u3089\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3001\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u307e\u3067\u3001\u8003\u616e\u3059\u3079\u304d\u70b9\u306f\u591a\u5c90\u306b\u308f\u305f\u308a\u307e\u3059\u3002\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001Java\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306e\u5b9f\u88c5\u624b\u6cd5\u3092\u4f53\u7cfb\u7684\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-19\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u3053\u306e\u8a18\u4e8b\u3067\u5b66\u3079\u308b\u3053\u3068<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\"><div id=\"sgb-css-id-3\">\n<p>1. <strong>\u57fa\u790e\u77e5\u8b58\u3068\u74b0\u5883\u69cb\u7bc9<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-4\">\n<p>\u3000\u25cf JDBC\u306e\u57fa\u672c\u6982\u5ff5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-5\">\n<p>\u3000\u25cf \u5404\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u88fd\u54c1\u3068\u306e\u9023\u643a\u65b9\u6cd5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-6\">\n<p>\u3000\u25cf \u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-7\">\n<p>2. <strong>\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-8\">\n<p>\u3000\u25cf \u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u65b9\u6cd5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-9\">\n<p>\u3000\u25cf \u5b89\u5168\u306aCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-10\">\n<p>\u3000\u25cf \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u306e\u6d3b\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-11\">\n<p>3. <strong>\u5b9f\u52d9\u3067\u91cd\u8981\u306a\u4e8b\u9805<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-12\">\n<p>\u3000\u25cf \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-13\">\n<p>\u3000\u25cf \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-14\">\n<p>\u3000\u25cf \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-15\">\n<p>4. <strong>\u767a\u5c55\u7684\u306a\u5185\u5bb9<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-16\">\n<p>\u3000\u25cf ORM\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6d3b\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-17\">\n<p>\u3000\u25cf NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-18\">\n<p>\u3000\u25cf \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306b\u304a\u3051\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08<\/p>\n<\/div><\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-20\">\n<p>\u305d\u308c\u3067\u306f\u3001Java\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306e\u5b9f\u88c5\u306b\u3064\u3044\u3066\u3001\u57fa\u790e\u304b\u3089\u5fdc\u7528\u307e\u3067\u6bb5\u968e\u7684\u306b\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-21\">\n<h2 class=\"wp-block-heading\" id=\"i-1\">\uff11. Java\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-22\">\n<h3 class=\"wp-block-heading\" id=\"i-2\">1.1 JDBC\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u672c\u6982\u5ff5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-23\">\n<p>JDBC\u306f\u3001Java Database Connectivity\u306e\u7565\u3067\u3001Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u6a19\u6e96API\u3067\u3059\u3002JDBC\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u7a2e\u985e\u306b\u4f9d\u5b58\u305b\u305a\u3001\u7d71\u4e00\u7684\u306a\u65b9\u6cd5\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-24\">\n<h4 class=\"wp-block-heading\" id=\"i-3\">JDBC\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-25\">\n<p><strong>1. JDBC API<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-26\">\n<p>\u3000\u25cf <code>java.sql<\/code>\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u542b\u307e\u308c\u308b\u57fa\u672c\u7684\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3068\u30af\u30e9\u30b9<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-27\">\n<p>\u3000\u25cf <code>javax.sql<\/code>\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u542b\u307e\u308c\u308b\u62e1\u5f35\u6a5f\u80fd<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-28\">\n<p><strong>2. JDBC\u30c9\u30e9\u30a4\u30d0\u30fc<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-29\">\n<p>\u3000\u25cf \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u56fa\u6709\u306e\u5b9f\u88c5\u3092\u63d0\u4f9b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-30\">\n<p>\u3000\u25cf JDBC\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9593\u306e\u6a4b\u6e21\u3057\u3092\u884c\u3046<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-31\">\n<h4 class=\"wp-block-heading\" id=\"i-4\">JDBC\u306e\u57fa\u672c\u7684\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ 1. JDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u306e\u767b\u9332\nClass.forName(\"com.mysql.cj.jdbc.Driver\");\n\n\/\/ 2. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u63a5\u7d9a\nConnection conn = DriverManager.getConnection(\n    \"jdbc:mysql:\/\/localhost:3306\/dbname\",\n    \"username\",\n    \"password\"\n);\n\n\/\/ 3. \u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u306e\u4f5c\u6210\nStatement stmt = conn.createStatement();\n\n\/\/ 4. SQL\u306e\u5b9f\u884c\nResultSet rs = stmt.executeQuery(\"SELECT * FROM users\");\n\n\/\/ 5. \u7d50\u679c\u306e\u51e6\u7406\nwhile (rs.next()) {\n    System.out.println(rs.getString(\"name\"));\n}\n\n\/\/ 6. \u30ea\u30bd\u30fc\u30b9\u306e\u30af\u30ed\u30fc\u30ba\nrs.close();\nstmt.close();\nconn.close();<\/pre>\n\n\n<div id=\"sgb-css-id-32\">\n<h3 class=\"wp-block-heading\" id=\"i-5\">1.2 \u4e3b\u8981\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u88fd\u54c1\u3068\u306e\u76f8\u6027\u6bd4\u8f03<\/h3>\n<\/div>\n\n<div id=\"id-8986d11a-3a1d-4605-8169-3a9c3b029f4f\"><div id=\"sgb-css-id-33\">\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9<\/th><th>JDBC\u30c9\u30e9\u30a4\u30d0\u30fc<\/th><th>\u7279\u5fb4<\/th><th>\u76f8\u6027<\/th><\/tr><\/thead><tbody><tr><td>MySQL<\/td><td><code>mysql-connector-java<\/code><\/td><td>\u2013 \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9<br>\u2013 \u8c4a\u5bcc\u306a\u5c0e\u5165\u5b9f\u7e3e<br>\u2013 \u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/td><td>\u2b50\u2b50\u2b50\u2b50\u2b50<\/td><\/tr><tr><td>PostgreSQL<\/td><td><code>postgresql-jdbc<\/code><\/td><td>\u2013 \u9ad8\u6a5f\u80fd<br>\u2013 \u512a\u308c\u305f\u578b\u30b5\u30dd\u30fc\u30c8<br>\u2013 \u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051\u6a5f\u80fd<\/td><td>\u2b50\u2b50\u2b50\u2b50\u2b50<\/td><\/tr><tr><td>Oracle<\/td><td><code>ojdbc<\/code><\/td><td>\u2013 \u5546\u7528\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6a19\u6e96<br>\u2013 \u9ad8\u5ea6\u306a\u6a5f\u80fd<br>\u2013 \u5b89\u5b9a\u6027\u91cd\u8996<\/td><td>\u2b50\u2b50\u2b50\u2b50<\/td><\/tr><tr><td>SQL Server<\/td><td><code>mssql-jdbc<\/code><\/td><td>\u2013 Windows\u74b0\u5883\u3068\u306e\u89aa\u548c\u6027<br>\u2013 .NET\u9023\u643a\u304c\u5bb9\u6613<br>\u2013 \u7ba1\u7406\u30c4\u30fc\u30eb\u304c\u5145\u5b9f<\/td><td>\u2b50\u2b50\u2b50\u2b50<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\n\n<div id=\"sgb-css-id-34\">\n<h3 class=\"wp-block-heading\" id=\"i-6\">1.3 \u74b0\u5883\u69cb\u7bc9\u306e\u5177\u4f53\u7684\u306a\u624b\u9806<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-35\">\n<h4 class=\"wp-block-heading\" id=\"i-7\">1. Maven\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u8a2d\u5b9a<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- pom.xml\u3078\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0 --&gt;\n&lt;dependencies&gt;\n    &lt;!-- MySQL\u306e\u5834\u5408 --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;mysql&lt;\/groupId&gt;\n        &lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\n        &lt;version&gt;8.0.27&lt;\/version&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;<\/pre>\n\n\n<div id=\"sgb-css-id-36\">\n<h4 class=\"wp-block-heading\" id=\"i-8\">2. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u8a2d\u5b9a<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ db.properties\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\ndb.url=jdbc:mysql:\/\/localhost:3306\/dbname\ndb.user=username\ndb.password=password\ndb.driver=com.mysql.cj.jdbc.Driver\n\n\/\/ \u8a2d\u5b9a\u8aad\u307f\u8fbc\u307f\u30af\u30e9\u30b9\u306e\u5b9f\u88c5\npublic class DBConfig {\n    private static Properties props = new Properties();\n\n    static {\n        try (InputStream input = \n            DBConfig.class.getClassLoader().getResourceAsStream(\"db.properties\")) {\n            props.load(input);\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n\n    public static String getProperty(String key) {\n        return props.getProperty(key);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-37\">\n<h4 class=\"wp-block-heading\" id=\"i-9\">3. \u57fa\u672c\u7684\u306a\u63a5\u7d9a\u30c6\u30b9\u30c8<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DBConnectionTest {\n    public static void testConnection() {\n        try {\n            \/\/ \u30c9\u30e9\u30a4\u30d0\u30fc\u306e\u767b\u9332\n            Class.forName(DBConfig.getProperty(\"db.driver\"));\n\n            \/\/ \u63a5\u7d9a\u30c6\u30b9\u30c8\n            try (Connection conn = DriverManager.getConnection(\n                    DBConfig.getProperty(\"db.url\"),\n                    DBConfig.getProperty(\"db.user\"),\n                    DBConfig.getProperty(\"db.password\"))) {\n\n                System.out.println(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u6210\u529f\uff01\");\n\n                \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30e1\u30bf\u60c5\u5831\u53d6\u5f97\n                DatabaseMetaData metaData = conn.getMetaData();\n                System.out.println(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u88fd\u54c1\u540d: \" + \n                    metaData.getDatabaseProductName());\n                System.out.println(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d0\u30fc\u30b8\u30e7\u30f3: \" + \n                    metaData.getDatabaseProductVersion());\n            }\n\n        } catch (ClassNotFoundException e) {\n            System.err.println(\"JDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: \" + e.getMessage());\n        } catch (SQLException e) {\n            System.err.println(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u30a8\u30e9\u30fc: \" + e.getMessage());\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-38\">\n<h4 class=\"wp-block-heading\" id=\"i-10\">\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u6642\u306e\u6ce8\u610f\u70b9<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-39\">\n<p><strong>1. \u30af\u30e9\u30b9\u30d1\u30b9\u306e\u78ba\u8a8d<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-40\">\n<p>\u3000\u25cf JDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u304c\u9069\u5207\u306b\u30af\u30e9\u30b9\u30d1\u30b9\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-41\">\n<p>\u3000\u25cf Maven\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u4f9d\u5b58\u95a2\u4fc2\u304c\u6b63\u3057\u304f\u89e3\u6c7a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-42\">\n<p><strong>2. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6e96\u5099<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-43\">\n<p>\u3000\u25cf \u5bfe\u8c61\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u8d77\u52d5\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-44\">\n<p>\u3000\u25cf \u9069\u5207\u306a\u6a29\u9650\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6e96\u5099<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-45\">\n<p><strong>3. \u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u8a2d\u5b9a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-46\">\n<p>\u3000\u25cf \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30dd\u30fc\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-47\">\n<p>\u3000\u25cf \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u306e\u8a2d\u5b9a\u3092\u8abf\u6574<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-48\">\n<p>\u3053\u306e\u57fa\u790e\u77e5\u8b58\u3092\u8e0f\u307e\u3048\u308b\u3053\u3068\u3067\u3001Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u5b89\u5168\u3067\u52b9\u7387\u7684\u306a\u30a2\u30af\u30bb\u30b9\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-49\">\n<h2 class=\"wp-block-heading\" id=\"i-11\">\uff12. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-50\">\n<h3 class=\"wp-block-heading\" id=\"i-12\">2.1 JDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-51\">\n<h4 class=\"wp-block-heading\" id=\"i-13\">Maven\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-52\">\n<p>\u4e3b\u8981\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7528\u306eJDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u8a2d\u5b9a\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;dependencies&gt;\n    &lt;!-- MySQL --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;mysql&lt;\/groupId&gt;\n        &lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\n        &lt;version&gt;8.0.27&lt;\/version&gt;\n    &lt;\/dependency&gt;\n\n    &lt;!-- PostgreSQL --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.postgresql&lt;\/groupId&gt;\n        &lt;artifactId&gt;postgresql&lt;\/artifactId&gt;\n        &lt;version&gt;42.3.1&lt;\/version&gt;\n    &lt;\/dependency&gt;\n\n    &lt;!-- Oracle --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;com.oracle.database.jdbc&lt;\/groupId&gt;\n        &lt;artifactId&gt;ojdbc8&lt;\/artifactId&gt;\n        &lt;version&gt;21.5.0.0&lt;\/version&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;<\/pre>\n\n\n<div id=\"sgb-css-id-53\">\n<h4 class=\"wp-block-heading\" id=\"i-14\">\u30c9\u30e9\u30a4\u30d0\u30fc\u767b\u9332\u30af\u30e9\u30b9\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DatabaseDriver {\n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7\u306e\u5217\u6319\n    public enum DBType {\n        MYSQL(\"com.mysql.cj.jdbc.Driver\"),\n        POSTGRESQL(\"org.postgresql.Driver\"),\n        ORACLE(\"oracle.jdbc.OracleDriver\");\n\n        private final String driverClassName;\n\n        DBType(String driverClassName) {\n            this.driverClassName = driverClassName;\n        }\n\n        public String getDriverClassName() {\n            return driverClassName;\n        }\n    }\n\n    \/\/ \u30c9\u30e9\u30a4\u30d0\u30fc\u306e\u767b\u9332\n    public static void registerDriver(DBType dbType) throws ClassNotFoundException {\n        Class.forName(dbType.getDriverClassName());\n        System.out.println(dbType + \" \u30c9\u30e9\u30a4\u30d0\u30fc\u3092\u767b\u9332\u3057\u307e\u3057\u305f\u3002\");\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-54\">\n<h3 class=\"wp-block-heading\" id=\"i-15\">2.2 Connection\u78ba\u7acb\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-55\">\n<h4 class=\"wp-block-heading\" id=\"i-16\">1. \u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u7528\u3044\u305f\u63a5\u7d9a\u7ba1\u7406<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DatabaseConnection {\n    private static DatabaseConnection instance;\n    private static Connection connection;\n\n    private DatabaseConnection() {}\n\n    public static DatabaseConnection getInstance() {\n        if (instance == null) {\n            instance = new DatabaseConnection();\n        }\n        return instance;\n    }\n\n    public Connection getConnection() throws SQLException {\n        if (connection == null || connection.isClosed()) {\n            try {\n                DatabaseDriver.registerDriver(DatabaseDriver.DBType.MYSQL);\n                connection = DriverManager.getConnection(\n                    \"jdbc:mysql:\/\/localhost:3306\/dbname\",\n                    \"username\",\n                    \"password\"\n                );\n                \/\/ \u81ea\u52d5\u30b3\u30df\u30c3\u30c8\u3092\u7121\u52b9\u5316\uff08\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5236\u5fa1\u306e\u305f\u3081\uff09\n                connection.setAutoCommit(false);\n            } catch (ClassNotFoundException | SQLException e) {\n                throw new SQLException(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u30a8\u30e9\u30fc: \" + e.getMessage());\n            }\n        }\n        return connection;\n    }\n\n    \/\/ \u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n    public void closeConnection() {\n        try {\n            if (connection != null &amp;&amp; !connection.isClosed()) {\n                connection.close();\n                System.out.println(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002\");\n            }\n        } catch (SQLException e) {\n            System.err.println(\"\u63a5\u7d9a\u306e\u30af\u30ed\u30fc\u30ba\u306b\u5931\u6557: \" + e.getMessage());\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-56\">\n<h4 class=\"wp-block-heading\" id=\"i-17\">2. try-with-resources\u3092\u4f7f\u7528\u3057\u305f\u5b89\u5168\u306a\u63a5\u7d9a\u7ba1\u7406<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class SafeDatabaseAccess {\n    public static void executeQuery(String sql) {\n        try (Connection conn = DatabaseConnection.getInstance().getConnection();\n             PreparedStatement stmt = conn.prepareStatement(sql);\n             ResultSet rs = stmt.executeQuery()) {\n\n            while (rs.next()) {\n                \/\/ \u7d50\u679c\u306e\u51e6\u7406\n            }\n\n            conn.commit();\n        } catch (SQLException e) {\n            System.err.println(\"\u30af\u30a8\u30ea\u5b9f\u884c\u30a8\u30e9\u30fc: \" + e.getMessage());\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-57\">\n<h3 class=\"wp-block-heading\" id=\"i-18\">2.3 \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u5316<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-58\">\n<h4 class=\"wp-block-heading\" id=\"i-19\">HikariCP\u306e\u5c0e\u5165\u3068\u8a2d\u5b9a<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- HikariCP\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0 --&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;com.zaxxer&lt;\/groupId&gt;\n    &lt;artifactId&gt;HikariCP&lt;\/artifactId&gt;\n    &lt;version&gt;5.0.1&lt;\/version&gt;\n&lt;\/dependency&gt;<\/pre>\n\n\n<div id=\"sgb-css-id-59\">\n<h4 class=\"wp-block-heading\" id=\"i-20\">\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u5b9f\u88c5\u4f8b<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ConnectionPool {\n    private static HikariDataSource dataSource;\n\n    static {\n        \/\/ HikariCP\u8a2d\u5b9a\n        HikariConfig config = new HikariConfig();\n        config.setJdbcUrl(\"jdbc:mysql:\/\/localhost:3306\/dbname\");\n        config.setUsername(\"username\");\n        config.setPassword(\"password\");\n\n        \/\/ \u30d7\u30fc\u30eb\u8a2d\u5b9a\n        config.setMaximumPoolSize(10);\n        config.setMinimumIdle(5);\n        config.setIdleTimeout(300000);\n        config.setConnectionTimeout(20000);\n\n        \/\/ \u30d7\u30fc\u30eb\u306e\u521d\u671f\u5316\n        dataSource = new HikariDataSource(config);\n    }\n\n    public static Connection getConnection() throws SQLException {\n        return dataSource.getConnection();\n    }\n\n    public static void closePool() {\n        if (dataSource != null &amp;&amp; !dataSource.isClosed()) {\n            dataSource.close();\n        }\n    }\n\n    \/\/ \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u306e\u4f7f\u7528\u4f8b\n    public static void executePooledQuery(String sql) {\n        try (Connection conn = getConnection();\n             PreparedStatement stmt = conn.prepareStatement(sql)) {\n\n            try (ResultSet rs = stmt.executeQuery()) {\n                while (rs.next()) {\n                    \/\/ \u7d50\u679c\u306e\u51e6\u7406\n                }\n            }\n\n        } catch (SQLException e) {\n            System.err.println(\"\u30d7\u30fc\u30eb\u63a5\u7d9a\u3067\u306e\u30af\u30a8\u30ea\u5b9f\u884c\u30a8\u30e9\u30fc: \" + e.getMessage());\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-60\">\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PoolMonitor {\n    public static void printPoolStats() {\n        HikariPoolMXBean poolProxy = dataSource.getHikariPoolMXBean();\n\n        System.out.println(\"\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u63a5\u7d9a\u6570: \" + poolProxy.getActiveConnections());\n        System.out.println(\"\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306e\u63a5\u7d9a\u6570: \" + poolProxy.getIdleConnections());\n        System.out.println(\"\u7dcf\u63a5\u7d9a\u6570: \" + poolProxy.getTotalConnections());\n        System.out.println(\"\u5f85\u6a5f\u4e2d\u306e\u30b9\u30ec\u30c3\u30c9\u6570: \" + poolProxy.getThreadsAwaitingConnection());\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-61\">\n<p>\u3053\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-62\">\n<p><strong>1. \u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-63\">\n<p>\u3000\u25cf \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u306e\u518d\u5229\u7528\u306b\u3088\u308b\u6027\u80fd\u5411\u4e0a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-64\">\n<p>\u3000\u25cf \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-65\">\n<p>\u3000\u25cf \u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-66\">\n<p><strong>2. \u5b89\u5168\u6027\u306e\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-67\">\n<p>\u3000\u25cf \u9069\u5207\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-68\">\n<p>\u3000\u25cf \u30ea\u30bd\u30fc\u30b9\u306e\u78ba\u5b9f\u306a\u89e3\u653e<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-69\">\n<p>\u3000\u25cf \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u7c21\u7d20\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-70\">\n<p><strong>3. \u904b\u7528\u6027\u306e\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-71\">\n<p>\u3000\u25cf \u63a5\u7d9a\u72b6\u614b\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-72\">\n<p>\u3000\u25cf \u30d7\u30fc\u30eb\u8a2d\u5b9a\u306e\u67d4\u8edf\u306a\u8abf\u6574<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u5bb9\u6613\u5316<\/p>\n\n\n<div id=\"sgb-css-id-73\">\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u63a5\u7d9a\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u969b\u306eCRUD\u64cd\u4f5c\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-74\">\n<h2 class=\"wp-block-heading\" id=\"i-22\">\uff13. \u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-75\">\n<h3 class=\"wp-block-heading\" id=\"i-23\">3.1 SELECT\u6587\u306b\u3088\u308b\u5b89\u5168\u306a\u30c7\u30fc\u30bf\u53d6\u5f97\u65b9\u6cd5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-76\">\n<h4 class=\"wp-block-heading\" id=\"i-24\">\u57fa\u672c\u7684\u306aSELECT\u64cd\u4f5c\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class UserRepository {\n    \/\/ \u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf\u3092\u8868\u3059\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\n    @Getter @Setter\n    public static class User {\n        private Long id;\n        private String name;\n        private String email;\n        private LocalDateTime createdAt;\n\n        \/\/ getters, setters\u7701\u7565\n    }\n\n    \/\/ \u5358\u4e00\u30ec\u30b3\u30fc\u30c9\u306e\u53d6\u5f97\n    public Optional&lt;User&gt; findById(Long id) {\n        String sql = \"SELECT id, name, email, created_at FROM users WHERE id = ?\";\n\n        try (Connection conn = ConnectionPool.getConnection();\n             PreparedStatement stmt = conn.prepareStatement(sql)) {\n\n            stmt.setLong(1, id);\n\n            try (ResultSet rs = stmt.executeQuery()) {\n                if (rs.next()) {\n                    User user = new User();\n                    user.setId(rs.getLong(\"id\"));\n                    user.setName(rs.getString(\"name\"));\n                    user.setEmail(rs.getString(\"email\"));\n                    user.setCreatedAt(rs.getTimestamp(\"created_at\").toLocalDateTime());\n                    return Optional.of(user);\n                }\n            }\n\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u30e6\u30fc\u30b6\u30fc\u53d6\u5f97\u30a8\u30e9\u30fc: \" + e.getMessage(), e);\n        }\n\n        return Optional.empty();\n    }\n\n    \/\/ \u8907\u6570\u30ec\u30b3\u30fc\u30c9\u306e\u53d6\u5f97\uff08\u30da\u30fc\u30b8\u30f3\u30b0\u5bfe\u5fdc\uff09\n    public List&lt;User&gt; findAll(int page, int size) {\n        String sql = \"SELECT id, name, email, created_at FROM users ORDER BY id LIMIT ? OFFSET ?\";\n        List&lt;User&gt; users = new ArrayList&lt;&gt;();\n\n        try (Connection conn = ConnectionPool.getConnection();\n             PreparedStatement stmt = conn.prepareStatement(sql)) {\n\n            stmt.setInt(1, size);\n            stmt.setInt(2, page * size);\n\n            try (ResultSet rs = stmt.executeQuery()) {\n                while (rs.next()) {\n                    User user = new User();\n                    user.setId(rs.getLong(\"id\"));\n                    user.setName(rs.getString(\"name\"));\n                    user.setEmail(rs.getString(\"email\"));\n                    user.setCreatedAt(rs.getTimestamp(\"created_at\").toLocalDateTime());\n                    users.add(user);\n                }\n            }\n\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u30e6\u30fc\u30b6\u30fc\u4e00\u89a7\u53d6\u5f97\u30a8\u30e9\u30fc: \" + e.getMessage(), e);\n        }\n\n        return users;\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-77\">\n<h4 class=\"wp-block-heading\" id=\"i-25\">\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u53d6\u5f97\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OptimizedQueryExecutor {\n    \/\/ \u7d50\u679c\u30bb\u30c3\u30c8\u306e\u6700\u5927\u30b5\u30a4\u30ba\u3092\u5236\u9650\n    private static final int MAX_RESULTS = 1000;\n\n    \/\/ \u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u4f7f\u7528\u3057\u305f\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406\n    public void processLargeData(String sql, Consumer&lt;ResultSet&gt; processor) {\n        try (Connection conn = ConnectionPool.getConnection();\n             PreparedStatement stmt = conn.prepareStatement(sql,\n                 ResultSet.TYPE_FORWARD_ONLY,\n                 ResultSet.CONCUR_READ_ONLY)) {\n\n            stmt.setFetchSize(100); \/\/ \u30d5\u30a7\u30c3\u30c1\u30b5\u30a4\u30ba\u306e\u6700\u9069\u5316\n\n            try (ResultSet rs = stmt.executeQuery()) {\n                while (rs.next()) {\n                    processor.accept(rs);\n                }\n            }\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u30c7\u30fc\u30bf\u51e6\u7406\u30a8\u30e9\u30fc: \" + e.getMessage(), e);\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-78\">\n<h3 class=\"wp-block-heading\" id=\"i-26\">3.2 INSERT\/UPDATE\/DELETE\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-79\">\n<h4 class=\"wp-block-heading\" id=\"i-27\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u3092\u542b\u3080CUD\u64cd\u4f5c<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class UserService {\n    private final UserRepository repository = new UserRepository();\n\n    \/\/ \u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\uff08INSERT\uff09\n    public User createUser(User user) {\n        String sql = \"INSERT INTO users (name, email, created_at) VALUES (?, ?, ?)\";\n\n        try (Connection conn = ConnectionPool.getConnection()) {\n            try (PreparedStatement stmt = conn.prepareStatement(sql, \n                Statement.RETURN_GENERATED_KEYS)) {\n\n                conn.setAutoCommit(false); \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u958b\u59cb\n\n                stmt.setString(1, user.getName());\n                stmt.setString(2, user.getEmail());\n                stmt.setTimestamp(3, Timestamp.valueOf(LocalDateTime.now()));\n\n                int affectedRows = stmt.executeUpdate();\n\n                if (affectedRows == 0) {\n                    throw new DatabaseException(\"\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\");\n                }\n\n                try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {\n                    if (generatedKeys.next()) {\n                        user.setId(generatedKeys.getLong(1));\n                    }\n                }\n\n                conn.commit(); \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u30b3\u30df\u30c3\u30c8\n                return user;\n\n            } catch (SQLException e) {\n                conn.rollback(); \/\/ \u30a8\u30e9\u30fc\u6642\u306e\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\n                throw new DatabaseException(\"\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u30a8\u30e9\u30fc: \" + e.getMessage(), e);\n            }\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u30a8\u30e9\u30fc: \" + e.getMessage(), e);\n        }\n    }\n\n    \/\/ \u30d0\u30c3\u30c1\u66f4\u65b0\u306e\u5b9f\u88c5\u4f8b\uff08UPDATE\uff09\n    public void updateUserStatuses(Map&lt;Long, String&gt; userStatuses) {\n        String sql = \"UPDATE users SET status = ? WHERE id = ?\";\n\n        try (Connection conn = ConnectionPool.getConnection();\n             PreparedStatement stmt = conn.prepareStatement(sql)) {\n\n            conn.setAutoCommit(false);\n\n            for (Map.Entry&lt;Long, String&gt; entry : userStatuses.entrySet()) {\n                stmt.setString(1, entry.getValue());\n                stmt.setLong(2, entry.getKey());\n                stmt.addBatch();\n            }\n\n            int[] results = stmt.executeBatch();\n            conn.commit();\n\n            \/\/ \u66f4\u65b0\u7d50\u679c\u306e\u78ba\u8a8d\n            for (int i = 0; i &lt; results.length; i++) {\n                if (results[i] == Statement.EXECUTE_FAILED) {\n                    System.err.println(\"\u66f4\u65b0\u5931\u6557: index \" + i);\n                }\n            }\n\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u30d0\u30c3\u30c1\u66f4\u65b0\u30a8\u30e9\u30fc: \" + e.getMessage(), e);\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-80\">\n<h3 class=\"wp-block-heading\" id=\"i-28\">3.3 PreparedStatement\u3092\u4f7f\u7528\u3057\u305fSQL\u5b9f\u884c<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-81\">\n<h4 class=\"wp-block-heading\" id=\"i-29\">PreparedStatement\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PreparedStatementExample {\n    \/\/ \u691c\u7d22\u6761\u4ef6\u3092\u52d5\u7684\u306b\u69cb\u7bc9\u3059\u308b\u4f8b\n    public List&lt;User&gt; searchUsers(UserSearchCriteria criteria) {\n        StringBuilder sql = new StringBuilder(\n            \"SELECT * FROM users WHERE 1=1\");\n        List&lt;Object&gt; params = new ArrayList&lt;&gt;();\n\n        if (criteria.getName() != null) {\n            sql.append(\" AND name LIKE ?\");\n            params.add(\"%\" + criteria.getName() + \"%\");\n        }\n\n        if (criteria.getEmail() != null) {\n            sql.append(\" AND email = ?\");\n            params.add(criteria.getEmail());\n        }\n\n        if (criteria.getCreatedAfter() != null) {\n            sql.append(\" AND created_at &gt;= ?\");\n            params.add(Timestamp.valueOf(criteria.getCreatedAfter()));\n        }\n\n        List&lt;User&gt; users = new ArrayList&lt;&gt;();\n\n        try (Connection conn = ConnectionPool.getConnection();\n             PreparedStatement stmt = conn.prepareStatement(sql.toString())) {\n\n            \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30d0\u30a4\u30f3\u30c9\n            for (int i = 0; i &lt; params.size(); i++) {\n                stmt.setObject(i + 1, params.get(i));\n            }\n\n            try (ResultSet rs = stmt.executeQuery()) {\n                while (rs.next()) {\n                    users.add(mapResultSetToUser(rs));\n                }\n            }\n\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u691c\u7d22\u30a8\u30e9\u30fc: \" + e.getMessage(), e);\n        }\n\n        return users;\n    }\n\n    \/\/ ResultSet\u304b\u3089User\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30de\u30c3\u30d4\u30f3\u30b0\n    private User mapResultSetToUser(ResultSet rs) throws SQLException {\n        User user = new User();\n        user.setId(rs.getLong(\"id\"));\n        user.setName(rs.getString(\"name\"));\n        user.setEmail(rs.getString(\"email\"));\n        user.setCreatedAt(rs.getTimestamp(\"created_at\").toLocalDateTime());\n        return user;\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-82\">\n<h4 class=\"wp-block-heading\" id=\"i-30\">PreparedStatement\u3092\u4f7f\u7528\u3059\u308b\u5229\u70b9<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-83\">\n<p><strong>1. SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-84\">\n<p>\u3000\u25cf \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30a8\u30b9\u30b1\u30fc\u30d7\u51e6\u7406\u304c\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-85\">\n<p>\u3000\u25cf \u60aa\u610f\u306e\u3042\u308bSQL\u6ce8\u5165\u653b\u6483\u3092\u9632\u6b62<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-86\">\n<p><strong>2. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-87\">\n<p>\u3000\u25cf SQL\u306e\u89e3\u6790\u7d50\u679c\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-88\">\n<p>\u3000\u25cf \u540c\u3058SQL\u3092\u8907\u6570\u56de\u5b9f\u884c\u3059\u308b\u5834\u5408\u306b\u52b9\u7387\u7684<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-89\">\n<p><strong>3. \u578b\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-90\">\n<p>\u3000\u25cf \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u578b\u30c1\u30a7\u30c3\u30af\u304c\u884c\u308f\u308c\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-91\">\n<p>\u3000\u25cf \u30c7\u30fc\u30bf\u578b\u306e\u4e0d\u6574\u5408\u306b\u3088\u308b\u30a8\u30e9\u30fc\u3092\u9632\u6b62<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-92\">\n<p><strong>4. \u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-93\">\n<p>\u3000\u25cf SQL\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u5206\u96e2\u3055\u308c\u308b<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u304c\u5411\u4e0a<\/p>\n\n\n<div id=\"sgb-css-id-94\">\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u3092\u3088\u308a\u5b89\u5168\u306b\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-95\">\n<h2 class=\"wp-block-heading\" id=\"i-31\">\uff14. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-96\">\n<h3 class=\"wp-block-heading\" id=\"i-32\">4.1 SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u306e\u5b9f\u88c5\u4f8b<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-97\">\n<h4 class=\"wp-block-heading\" id=\"i-33\">\u30bb\u30ad\u30e5\u30a2\u306a\u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u30fc\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class SecureQueryBuilder {\n    public static class QueryParams {\n        private final StringBuilder sql;\n        private final List&lt;Object&gt; parameters;\n\n        public QueryParams() {\n            this.sql = new StringBuilder();\n            this.parameters = new ArrayList&lt;&gt;();\n        }\n\n        public void append(String sqlPart) {\n            sql.append(sqlPart);\n        }\n\n        public void addParameter(Object param) {\n            parameters.add(param);\n        }\n\n        public String getSql() {\n            return sql.toString();\n        }\n\n        public Object[] getParameters() {\n            return parameters.toArray();\n        }\n    }\n\n    \/\/ \u30bb\u30ad\u30e5\u30a2\u306aWHERE\u53e5\u306e\u69cb\u7bc9\n    public static QueryParams buildSecureWhere(Map&lt;String, Object&gt; conditions) {\n        QueryParams params = new QueryParams();\n        params.append(\"WHERE 1=1\");\n\n        conditions.forEach((key, value) -&gt; {\n            params.append(\" AND \" + key + \" = ?\");\n            params.addParameter(value);\n        });\n\n        return params;\n    }\n\n    \/\/ \u4f7f\u7528\u4f8b\n    public List&lt;User&gt; findUsersSecurely(Map&lt;String, Object&gt; conditions) {\n        QueryParams params = buildSecureWhere(conditions);\n        String baseSql = \"SELECT * FROM users \";\n\n        try (Connection conn = ConnectionPool.getConnection();\n             PreparedStatement stmt = conn.prepareStatement(\n                 baseSql + params.getSql())) {\n\n            \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30d0\u30a4\u30f3\u30c9\n            Object[] parameters = params.getParameters();\n            for (int i = 0; i &lt; parameters.length; i++) {\n                stmt.setObject(i + 1, parameters[i]);\n            }\n\n            return executeAndMapResults(stmt);\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u691c\u7d22\u5b9f\u884c\u30a8\u30e9\u30fc\", e);\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-98\">\n<h4 class=\"wp-block-heading\" id=\"i-34\">\u5165\u529b\u5024\u306e\u691c\u8a3c\u3068\u7121\u5bb3\u5316<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class InputValidator {\n    private static final Pattern ALPHANUMERIC = Pattern.compile(\"^[a-zA-Z0-9]+$\");\n    private static final Pattern EMAIL = Pattern.compile(\"^[A-Za-z0-9+_.-]+@(.+)$\");\n\n    public static String sanitizeInput(String input) {\n        if (input == null) {\n            return null;\n        }\n        \/\/ HTML\u30a8\u30b9\u30b1\u30fc\u30d7\u51e6\u7406\n        return input.replaceAll(\"&lt;\", \"&amp;lt;\")\n                   .replaceAll(\"&gt;\", \"&amp;gt;\")\n                   .replaceAll(\"\\\"\", \"&amp;quot;\")\n                   .replaceAll(\"'\", \"&amp;#x27;\")\n                   .replaceAll(\"\/\", \"&amp;#x2F;\");\n    }\n\n    public static boolean isValidInput(String input, String type) {\n        if (input == null) {\n            return false;\n        }\n\n        switch (type) {\n            case \"alphanumeric\":\n                return ALPHANUMERIC.matcher(input).matches();\n            case \"email\":\n                return EMAIL.matcher(input).matches();\n            default:\n                return false;\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-99\">\n<h3 class=\"wp-block-heading\" id=\"i-35\">4.2 \u8a8d\u8a3c\u60c5\u5831\u306e\u5b89\u5168\u306a\u7ba1\u7406\u65b9\u6cd5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-100\">\n<h4 class=\"wp-block-heading\" id=\"i-36\">\u6697\u53f7\u5316\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class EncryptionUtil {\n    private static final String ALGORITHM = \"AES\/GCM\/NoPadding\";\n    private static final int TAG_LENGTH_BIT = 128;\n    private static final int IV_LENGTH_BYTE = 12;\n\n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a8d\u8a3c\u60c5\u5831\u306e\u6697\u53f7\u5316\n    public static String encryptCredential(String plaintext, SecretKey key) \n            throws Exception {\n        byte[] iv = generateIv();\n        Cipher cipher = Cipher.getInstance(ALGORITHM);\n        GCMParameterSpec spec = new GCMParameterSpec(TAG_LENGTH_BIT, iv);\n        cipher.init(Cipher.ENCRYPT_MODE, key, spec);\n\n        byte[] cipherText = cipher.doFinal(plaintext.getBytes());\n        byte[] encrypted = ByteBuffer.allocate(iv.length + cipherText.length)\n            .put(iv)\n            .put(cipherText)\n            .array();\n\n        return Base64.getEncoder().encodeToString(encrypted);\n    }\n\n    \/\/ \u6697\u53f7\u5316\u3055\u308c\u305f\u8a8d\u8a3c\u60c5\u5831\u306e\u5fa9\u53f7\n    public static String decryptCredential(String ciphertext, SecretKey key) \n            throws Exception {\n        byte[] decoded = Base64.getDecoder().decode(ciphertext);\n        ByteBuffer bb = ByteBuffer.wrap(decoded);\n\n        byte[] iv = new byte[IV_LENGTH_BYTE];\n        bb.get(iv);\n        byte[] cipherText = new byte[bb.remaining()];\n        bb.get(cipherText);\n\n        Cipher cipher = Cipher.getInstance(ALGORITHM);\n        GCMParameterSpec spec = new GCMParameterSpec(TAG_LENGTH_BIT, iv);\n        cipher.init(Cipher.DECRYPT_MODE, key, spec);\n\n        return new String(cipher.doFinal(cipherText));\n    }\n\n    private static byte[] generateIv() {\n        byte[] iv = new byte[IV_LENGTH_BYTE];\n        new SecureRandom().nextBytes(iv);\n        return iv;\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-101\">\n<h4 class=\"wp-block-heading\" id=\"i-37\">\u30bb\u30ad\u30e5\u30a2\u306a\u8a2d\u5b9a\u7ba1\u7406<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class SecureConfigManager {\n    private static final Properties props = new Properties();\n    private static final SecretKey key = generateKey();\n\n    static {\n        try (InputStream input = \n            SecureConfigManager.class.getClassLoader()\n                .getResourceAsStream(\"secure.properties\")) {\n            props.load(input);\n        } catch (IOException e) {\n            throw new RuntimeException(\"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\", e);\n        }\n    }\n\n    public static String getDecryptedProperty(String propertyName) {\n        try {\n            String encrypted = props.getProperty(propertyName);\n            return EncryptionUtil.decryptCredential(encrypted, key);\n        } catch (Exception e) {\n            throw new RuntimeException(\"\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u5fa9\u53f7\u306b\u5931\u6557: \" + propertyName, e);\n        }\n    }\n\n    private static SecretKey generateKey() {\n        try {\n            KeyGenerator keyGen = KeyGenerator.getInstance(\"AES\");\n            keyGen.init(256);\n            return keyGen.generateKey();\n        } catch (NoSuchAlgorithmException e) {\n            throw new RuntimeException(\"\u9375\u306e\u751f\u6210\u306b\u5931\u6557\", e);\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-102\">\n<h3 class=\"wp-block-heading\" id=\"i-38\">4.3 \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u91cd\u8981\u6027<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-103\">\n<h4 class=\"wp-block-heading\" id=\"i-39\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u30af\u30e9\u30b9\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class TransactionManager {\n    \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5b9f\u884c\u7528\u306e\u95a2\u6570\u578b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\n    @FunctionalInterface\n    public interface TransactionBlock&lt;T&gt; {\n        T execute(Connection conn) throws SQLException;\n    }\n\n    \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5236\u5fa1\u4ed8\u304d\u306e\u51e6\u7406\u5b9f\u884c\n    public static &lt;T&gt; T executeInTransaction(TransactionBlock&lt;T&gt; block) {\n        Connection conn = null;\n        try {\n            conn = ConnectionPool.getConnection();\n            conn.setAutoCommit(false);\n\n            T result = block.execute(conn);\n\n            conn.commit();\n            return result;\n\n        } catch (SQLException e) {\n            try {\n                if (conn != null) {\n                    conn.rollback();\n                }\n            } catch (SQLException ex) {\n                throw new DatabaseException(\"\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u5931\u6557\", ex);\n            }\n            throw new DatabaseException(\"\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5b9f\u884c\u30a8\u30e9\u30fc\", e);\n\n        } finally {\n            try {\n                if (conn != null) {\n                    conn.setAutoCommit(true);\n                    conn.close();\n                }\n            } catch (SQLException e) {\n                System.err.println(\"\u63a5\u7d9a\u306e\u30af\u30ed\u30fc\u30ba\u306b\u5931\u6557: \" + e.getMessage());\n            }\n        }\n    }\n\n    \/\/ \u4f7f\u7528\u4f8b\n    public void transferMoney(long fromId, long toId, BigDecimal amount) {\n        TransactionManager.executeInTransaction(conn -&gt; {\n            \/\/ \u9001\u91d1\u5143\u306e\u6b8b\u9ad8\u78ba\u8a8d\u3068\u66f4\u65b0\n            try (PreparedStatement checkStmt = conn.prepareStatement(\n                \"SELECT balance FROM accounts WHERE id = ? FOR UPDATE\")) {\n\n                checkStmt.setLong(1, fromId);\n                ResultSet rs = checkStmt.executeQuery();\n\n                if (!rs.next() || rs.getBigDecimal(\"balance\").compareTo(amount) &lt; 0) {\n                    throw new InsufficientBalanceException(\"\u6b8b\u9ad8\u4e0d\u8db3\");\n                }\n            }\n\n            \/\/ \u9001\u91d1\u51e6\u7406\u306e\u5b9f\u884c\n            try (PreparedStatement updateStmt = conn.prepareStatement(\n                \"UPDATE accounts SET balance = balance + ? WHERE id = ?\")) {\n\n                \/\/ \u9001\u91d1\u5143\u304b\u3089\u5f15\u304d\u843d\u3068\u3057\n                updateStmt.setBigDecimal(1, amount.negate());\n                updateStmt.setLong(2, fromId);\n                updateStmt.executeUpdate();\n\n                \/\/ \u9001\u91d1\u5148\u306b\u5165\u91d1\n                updateStmt.setBigDecimal(1, amount);\n                updateStmt.setLong(2, toId);\n                updateStmt.executeUpdate();\n            }\n\n            return null;\n        });\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-104\">\n<p>\u3053\u308c\u3089\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u52b9\u679c\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-105\">\n<p><strong>1. \u30c7\u30fc\u30bf\u306e\u4fdd\u8b77<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-106\">\n<p>\u3000\u25cf SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u653b\u6483\u306e\u9632\u6b62<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-107\">\n<p>\u3000\u25cf \u6a5f\u5bc6\u60c5\u5831\u306e\u6697\u53f7\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-108\">\n<p>\u3000\u25cf \u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u306e\u5f37\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-109\">\n<p><strong>2. \u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u78ba\u4fdd<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-110\">\n<p>\u3000\u25cf \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306b\u3088\u308b\u4e00\u8cab\u6027\u306e\u4fdd\u6301<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-111\">\n<p>\u3000\u25cf \u540c\u6642\u5b9f\u884c\u5236\u5fa1<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-112\">\n<p>\u3000\u25cf \u30a8\u30e9\u30fc\u6642\u306e\u9069\u5207\u306a\u30ed\u30fc\u30eb\u30d0\u30c3\u30af<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-113\">\n<p><strong>3. \u76e3\u67fb\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-114\">\n<p>\u3000\u25cf \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u9055\u53cd\u306e\u691c\u51fa<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-115\">\n<p>\u3000\u25cf \u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u306e\u8a18\u9332<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u7570\u5e38\u306a\u52d5\u4f5c\u306e\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0<\/p>\n\n\n<div id=\"sgb-css-id-116\">\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u8e0f\u307e\u3048\u305f\u4e0a\u3067\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-117\">\n<h2 class=\"wp-block-heading\" id=\"i-40\">\uff15. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-118\">\n<h3 class=\"wp-block-heading\" id=\"i-41\">5.1 \u30af\u30a8\u30ea\u5b9f\u884c\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-119\">\n<h4 class=\"wp-block-heading\" id=\"i-42\">\u30af\u30a8\u30ea\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u76e3\u8996<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class QueryPerformanceMonitor {\n    private static final Logger logger = LoggerFactory.getLogger(QueryPerformanceMonitor.class);\n\n    \/\/ \u30af\u30a8\u30ea\u5b9f\u884c\u6642\u9593\u306e\u8a08\u6e2c\n    public static &lt;T&gt; T measureQueryPerformance(String queryName, Supplier&lt;T&gt; queryExecution) {\n        long startTime = System.nanoTime();\n        T result = queryExecution.get();\n        long endTime = System.nanoTime();\n\n        long executionTime = (endTime - startTime) \/ 1_000_000; \/\/ \u30df\u30ea\u79d2\u306b\u5909\u63db\n        logger.info(\"\u30af\u30a8\u30ea '{}' \u306e\u5b9f\u884c\u6642\u9593: {}ms\", queryName, executionTime);\n\n        return result;\n    }\n\n    \/\/ \u30b9\u30ed\u30fc\u30af\u30a8\u30ea\u306e\u691c\u51fa\n    public static void checkSlowQuery(String sql, long executionTime, long threshold) {\n        if (executionTime &gt; threshold) {\n            logger.warn(\"\u30b9\u30ed\u30fc\u30af\u30a8\u30ea\u691c\u51fa: {} (\u5b9f\u884c\u6642\u9593: {}ms)\", sql, executionTime);\n            \/\/ \u5b9f\u884c\u8a08\u753b\u306e\u53d6\u5f97\u3068\u5206\u6790\n            analyzeQueryPlan(sql);\n        }\n    }\n\n    private static void analyzeQueryPlan(String sql) {\n        try (Connection conn = ConnectionPool.getConnection()) {\n            try (PreparedStatement stmt = conn.prepareStatement(\"EXPLAIN \" + sql)) {\n                ResultSet rs = stmt.executeQuery();\n                while (rs.next()) {\n                    logger.info(\"\u5b9f\u884c\u8a08\u753b: {}\", rs.getString(1));\n                }\n            }\n        } catch (SQLException e) {\n            logger.error(\"\u5b9f\u884c\u8a08\u753b\u306e\u53d6\u5f97\u306b\u5931\u6557: {}\", e.getMessage());\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-120\">\n<h4 class=\"wp-block-heading\" id=\"i-43\">\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u6d3b\u7528\u3057\u305f\u30af\u30a8\u30ea\u6700\u9069\u5316<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class QueryOptimizer {\n    \/\/ \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8003\u616e\u3057\u305f\u30af\u30a8\u30ea\u751f\u6210\n    public static String optimizeSelectQuery(String baseTable, \n                                          List&lt;String&gt; selectedColumns,\n                                          Map&lt;String, Object&gt; conditions) {\n        StringBuilder sql = new StringBuilder(\"SELECT \");\n\n        \/\/ \u30ab\u30e9\u30e0\u306e\u9078\u629e\u6700\u9069\u5316\n        if (selectedColumns.isEmpty()) {\n            sql.append(\"*\");\n        } else {\n            sql.append(String.join(\", \", selectedColumns));\n        }\n\n        sql.append(\" FROM \").append(baseTable);\n\n        \/\/ \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u6d3b\u7528\u3059\u308bWHERE\u53e5\u306e\u69cb\u7bc9\n        if (!conditions.isEmpty()) {\n            sql.append(\" WHERE \");\n            List&lt;String&gt; whereConditions = new ArrayList&lt;&gt;();\n\n            \/\/ \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u5217\u3092\u512a\u5148\u7684\u306b\u4f7f\u7528\n            conditions.forEach((column, value) -&gt; {\n                if (value instanceof Collection) {\n                    whereConditions.add(column + \" IN (?)\");\n                } else {\n                    whereConditions.add(column + \" = ?\");\n                }\n            });\n\n            sql.append(String.join(\" AND \", whereConditions));\n        }\n\n        return sql.toString();\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-121\">\n<h3 class=\"wp-block-heading\" id=\"i-44\">5.2 \u30d0\u30c3\u30c1\u51e6\u7406\u306b\u3088\u308b\u51e6\u7406\u52b9\u7387\u306e\u5411\u4e0a<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-122\">\n<h4 class=\"wp-block-heading\" id=\"i-45\">\u52b9\u7387\u7684\u306a\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class BatchProcessor {\n    private static final int BATCH_SIZE = 1000;\n\n    \/\/ \u30d0\u30c3\u30c1\u30a4\u30f3\u30b5\u30fc\u30c8\u306e\u5b9f\u88c5\n    public void batchInsert(List&lt;User&gt; users) {\n        String sql = \"INSERT INTO users (name, email, created_at) VALUES (?, ?, ?)\";\n\n        try (Connection conn = ConnectionPool.getConnection();\n             PreparedStatement stmt = conn.prepareStatement(sql)) {\n\n            conn.setAutoCommit(false);\n            int count = 0;\n\n            for (User user : users) {\n                stmt.setString(1, user.getName());\n                stmt.setString(2, user.getEmail());\n                stmt.setTimestamp(3, Timestamp.valueOf(LocalDateTime.now()));\n                stmt.addBatch();\n                count++;\n\n                if (count % BATCH_SIZE == 0) {\n                    stmt.executeBatch();\n                    conn.commit();\n                    stmt.clearBatch();\n                }\n            }\n\n            \/\/ \u6b8b\u308a\u306e\u30d0\u30c3\u30c1\u3092\u5b9f\u884c\n            if (count % BATCH_SIZE != 0) {\n                stmt.executeBatch();\n                conn.commit();\n            }\n\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u30d0\u30c3\u30c1\u51e6\u7406\u30a8\u30e9\u30fc: \" + e.getMessage(), e);\n        }\n    }\n\n    \/\/ \u4e26\u5217\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5\n    public void parallelBatchProcess(List&lt;User&gt; users, int threadCount) {\n        int batchSize = users.size() \/ threadCount;\n        ExecutorService executor = Executors.newFixedThreadPool(threadCount);\n        List&lt;Future&lt;?&gt;&gt; futures = new ArrayList&lt;&gt;();\n\n        for (int i = 0; i &lt; threadCount; i++) {\n            int startIndex = i * batchSize;\n            int endIndex = (i == threadCount - 1) ? users.size() : (i + 1) * batchSize;\n\n            List&lt;User&gt; batch = users.subList(startIndex, endIndex);\n            futures.add(executor.submit(() -&gt; batchInsert(batch)));\n        }\n\n        \/\/ \u5168\u3066\u306e\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b8c\u4e86\u3092\u5f85\u6a5f\n        for (Future&lt;?&gt; future : futures) {\n            try {\n                future.get();\n            } catch (Exception e) {\n                throw new DatabaseException(\"\u4e26\u5217\u30d0\u30c3\u30c1\u51e6\u7406\u30a8\u30e9\u30fc\", e);\n            }\n        }\n\n        executor.shutdown();\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-123\">\n<h3 class=\"wp-block-heading\" id=\"i-46\">5.3 \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-124\">\n<h4 class=\"wp-block-heading\" id=\"i-47\">\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u6700\u9069\u5316<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ConnectionManager {\n    private static final int CONNECTION_TIMEOUT = 30000; \/\/ 30\u79d2\n    private static final int QUERY_TIMEOUT = 10000; \/\/ 10\u79d2\n    private static final int VALIDATION_TIMEOUT = 5000; \/\/ 5\u79d2\n\n    \/\/ \u6700\u9069\u5316\u3055\u308c\u305f\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u8a2d\u5b9a\n    public static HikariConfig createOptimizedConfig() {\n        HikariConfig config = new HikariConfig();\n\n        \/\/ \u57fa\u672c\u8a2d\u5b9a\n        config.setJdbcUrl(\"jdbc:mysql:\/\/localhost:3306\/dbname\");\n        config.setUsername(\"username\");\n        config.setPassword(\"password\");\n\n        \/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8a2d\u5b9a\n        config.setMaximumPoolSize(10);\n        config.setMinimumIdle(5);\n        config.setIdleTimeout(300000); \/\/ 5\u5206\n        config.setMaxLifetime(1800000); \/\/ 30\u5206\n\n        \/\/ \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\n        config.setConnectionTimeout(CONNECTION_TIMEOUT);\n        config.setValidationTimeout(VALIDATION_TIMEOUT);\n\n        \/\/ \u63a5\u7d9a\u30c6\u30b9\u30c8\u8a2d\u5b9a\n        config.setConnectionTestQuery(\"SELECT 1\");\n        config.setInitializationFailTimeout(1);\n\n        return config;\n    }\n\n    \/\/ \u30af\u30a8\u30ea\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\u3092\u9069\u7528\u3057\u305f\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u751f\u6210\n    public static PreparedStatement createTimedStatement(Connection conn, \n                                                       String sql) \n            throws SQLException {\n        PreparedStatement stmt = conn.prepareStatement(sql);\n        stmt.setQueryTimeout(QUERY_TIMEOUT \/ 1000); \/\/ \u79d2\u5358\u4f4d\u3067\u306e\u8a2d\u5b9a\n        return stmt;\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-125\">\n<h4 class=\"wp-block-heading\" id=\"i-48\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PerformanceMonitor {\n    private static final Logger logger = LoggerFactory.getLogger(PerformanceMonitor.class);\n\n    \/\/ \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u306e\u72b6\u614b\u76e3\u8996\n    public static void monitorConnectionPool(HikariDataSource dataSource) {\n        HikariPoolMXBean poolMXBean = dataSource.getHikariPoolMXBean();\n\n        logger.info(\"\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u72b6\u614b:\");\n        logger.info(\"\u30a2\u30af\u30c6\u30a3\u30d6\u63a5\u7d9a\u6570: {}\", poolMXBean.getActiveConnections());\n        logger.info(\"\u30a2\u30a4\u30c9\u30eb\u63a5\u7d9a\u6570: {}\", poolMXBean.getIdleConnections());\n        logger.info(\"\u5f85\u6a5f\u30b9\u30ec\u30c3\u30c9\u6570: {}\", poolMXBean.getThreadsAwaitingConnection());\n        logger.info(\"\u7dcf\u63a5\u7d9a\u6570: {}\", poolMXBean.getTotalConnections());\n    }\n\n    \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u72b6\u6cc1\u306e\u76e3\u8996\n    public static void monitorMemoryUsage() {\n        Runtime runtime = Runtime.getRuntime();\n        long totalMemory = runtime.totalMemory();\n        long freeMemory = runtime.freeMemory();\n        long usedMemory = totalMemory - freeMemory;\n\n        logger.info(\"\u30e1\u30e2\u30ea\u4f7f\u7528\u72b6\u6cc1:\");\n        logger.info(\"\u4f7f\u7528\u4e2d\u30e1\u30e2\u30ea: {} MB\", usedMemory \/ 1024 \/ 1024);\n        logger.info(\"\u7a7a\u304d\u30e1\u30e2\u30ea: {} MB\", freeMemory \/ 1024 \/ 1024);\n        logger.info(\"\u7dcf\u30e1\u30e2\u30ea: {} MB\", totalMemory \/ 1024 \/ 1024);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-126\">\n<p>\u3053\u308c\u3089\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u65bd\u7b56\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u52b9\u679c\u304c\u671f\u5f85\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-127\">\n<p><strong>1. \u51e6\u7406\u901f\u5ea6\u306e\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-128\">\n<p>\u3000\u25cf \u30af\u30a8\u30ea\u5b9f\u884c\u306e\u6700\u9069\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-129\">\n<p>\u3000\u25cf \u30d0\u30c3\u30c1\u51e6\u7406\u306b\u3088\u308b\u52b9\u7387\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-130\">\n<p>\u3000\u25cf \u9069\u5207\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u6d3b\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-131\">\n<p><strong>2. \u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u5229\u7528<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-132\">\n<p>\u3000\u25cf \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u306e\u6700\u9069\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-133\">\n<p>\u3000\u25cf \u30e1\u30e2\u30ea\u4f7f\u7528\u306e\u6700\u9069\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-134\">\n<p>\u3000\u25cf \u9069\u5207\u306a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-135\">\n<p><strong>3. \u30b7\u30b9\u30c6\u30e0\u306e\u5b89\u5b9a\u6027\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-136\">\n<p>\u3000\u25cf \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u76e3\u8996<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-137\">\n<p>\u3000\u25cf \u554f\u984c\u306e\u65e9\u671f\u767a\u898b<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u30ea\u30bd\u30fc\u30b9\u67af\u6e07\u306e\u9632\u6b62<\/p>\n\n\n<div id=\"sgb-css-id-138\">\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u3092\u9069\u7528\u3057\u305f\u4e0a\u3067\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-139\">\n<h2 class=\"wp-block-heading\" id=\"i-49\">\uff16. \u5b9f\u8df5\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-140\">\n<h3 class=\"wp-block-heading\" id=\"i-50\">6.1 \u3088\u304f\u3042\u308b\u63a5\u7d9a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u6cd5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-141\">\n<h4 class=\"wp-block-heading\" id=\"i-51\">\u30a8\u30e9\u30fc\u691c\u51fa\u3068\u89e3\u6c7a\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DatabaseTroubleshooter {\n    private static final Logger logger = LoggerFactory.getLogger(DatabaseTroubleshooter.class);\n\n    \/\/ \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u305f\u3081\u306e\u5217\u6319\u578b\n    public enum DatabaseErrorType {\n        CONNECTION_FAILURE,\n        AUTHENTICATION_ERROR,\n        TIMEOUT_ERROR,\n        RESOURCE_EXHAUSTION,\n        UNKNOWN_ERROR\n    }\n\n    \/\/ \u30a8\u30e9\u30fc\u5206\u985e\u3068\u8a3a\u65ad\n    public static DatabaseErrorType diagnoseError(SQLException e) {\n        String sqlState = e.getSQLState();\n        int errorCode = e.getErrorCode();\n\n        \/\/ SQLState\u306b\u57fa\u3065\u304f\u30a8\u30e9\u30fc\u5206\u985e\n        if (sqlState != null) {\n            switch (sqlState.substring(0, 2)) {\n                case \"08\": return DatabaseErrorType.CONNECTION_FAILURE;\n                case \"28\": return DatabaseErrorType.AUTHENTICATION_ERROR;\n                case \"57\": return DatabaseErrorType.RESOURCE_EXHAUSTION;\n                default: return DatabaseErrorType.UNKNOWN_ERROR;\n            }\n        }\n\n        \/\/ \u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\u306b\u57fa\u3065\u304f\u5206\u985e\n        if (errorCode == 0) {\n            return DatabaseErrorType.TIMEOUT_ERROR;\n        }\n\n        return DatabaseErrorType.UNKNOWN_ERROR;\n    }\n\n    \/\/ \u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u306e\u5b9f\u88c5\n    public static &lt;T&gt; T executeWithRetry(DatabaseOperation&lt;T&gt; operation, \n                                       int maxRetries) {\n        int attempts = 0;\n        while (attempts &lt; maxRetries) {\n            try {\n                return operation.execute();\n            } catch (SQLException e) {\n                attempts++;\n                DatabaseErrorType errorType = diagnoseError(e);\n\n                switch (errorType) {\n                    case CONNECTION_FAILURE:\n                        handleConnectionFailure(e, attempts, maxRetries);\n                        break;\n                    case TIMEOUT_ERROR:\n                        handleTimeout(e, attempts, maxRetries);\n                        break;\n                    default:\n                        throw new DatabaseException(\"\u30ea\u30ab\u30d0\u30ea\u4e0d\u53ef\u80fd\u306a\u30a8\u30e9\u30fc\", e);\n                }\n\n                \/\/ \u518d\u8a66\u884c\u524d\u306e\u5f85\u6a5f\n                try {\n                    Thread.sleep(calculateBackoff(attempts));\n                } catch (InterruptedException ie) {\n                    Thread.currentThread().interrupt();\n                    throw new DatabaseException(\"\u30ea\u30c8\u30e9\u30a4\u4e2d\u65ad\", ie);\n                }\n            }\n        }\n        throw new DatabaseException(\"\u6700\u5927\u30ea\u30c8\u30e9\u30a4\u56de\u6570\u3092\u8d85\u904e\");\n    }\n\n    private static long calculateBackoff(int attempt) {\n        return Math.min(1000L * (long) Math.pow(2, attempt), 30000L);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-142\">\n<h4 class=\"wp-block-heading\" id=\"i-52\">\u63a5\u7d9a\u30a8\u30e9\u30fc\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ConnectionTroubleshooter {\n    \/\/ \u63a5\u7d9a\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5\n    public static boolean testConnection(String jdbcUrl, \n                                       String username, \n                                       String password) {\n        try (Connection conn = DriverManager.getConnection(\n                jdbcUrl, username, password)) {\n\n            \/\/ \u57fa\u672c\u7684\u306a\u63a5\u7d9a\u30c6\u30b9\u30c8\n            try (Statement stmt = conn.createStatement()) {\n                stmt.execute(\"SELECT 1\");\n            }\n\n            \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\n            DatabaseMetaData metaData = conn.getMetaData();\n            logger.info(\"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u88fd\u54c1\u540d: {}\", \n                metaData.getDatabaseProductName());\n            logger.info(\"JDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3: {}\", \n                metaData.getDriverVersion());\n\n            return true;\n\n        } catch (SQLException e) {\n            logger.error(\"\u63a5\u7d9a\u30c6\u30b9\u30c8\u5931\u6557: {}\", e.getMessage());\n            logger.error(\"SQLState: {}\", e.getSQLState());\n            logger.error(\"\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9: {}\", e.getErrorCode());\n            return false;\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-143\">\n<h3 class=\"wp-block-heading\" id=\"i-53\">6.2 \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u767a\u751f\u6642\u306e\u5bfe\u51e6\u65b9\u6cd5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-144\">\n<h4 class=\"wp-block-heading\" id=\"i-54\">\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u691c\u51fa\u3068\u89e3\u6c7a<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DeadlockHandler {\n    private static final int MAX_RETRIES = 3;\n    private static final long RETRY_DELAY = 1000; \/\/ 1\u79d2\n\n    \/\/ \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u5bfe\u5fdc\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5b9f\u884c\n    public static &lt;T&gt; T executeWithDeadlockHandling(\n            TransactionOperation&lt;T&gt; operation) {\n        int attempts = 0;\n        while (true) {\n            try {\n                return operation.execute();\n            } catch (SQLException e) {\n                if (isDeadlock(e) &amp;&amp; attempts &lt; MAX_RETRIES) {\n                    attempts++;\n                    logger.warn(\"\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u691c\u51fa - \u518d\u8a66\u884c {}\/{}\", \n                        attempts, MAX_RETRIES);\n                    sleep(RETRY_DELAY);\n                    continue;\n                }\n                throw new DatabaseException(\"\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5931\u6557\", e);\n            }\n        }\n    }\n\n    \/\/ \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u9632\u6b62\u306e\u305f\u3081\u306e\u30ed\u30c3\u30af\u53d6\u5f97\u9806\u5e8f\u5236\u5fa1\n    public static void executeOrderedLocking(Long... ids) {\n        \/\/ ID\u3092\u6607\u9806\u306b\u30bd\u30fc\u30c8\n        Arrays.sort(ids);\n\n        try (Connection conn = ConnectionPool.getConnection()) {\n            conn.setAutoCommit(false);\n\n            \/\/ \u30bd\u30fc\u30c8\u3055\u308c\u305f\u9806\u5e8f\u3067\u30ed\u30c3\u30af\u3092\u53d6\u5f97\n            for (Long id : ids) {\n                try (PreparedStatement stmt = conn.prepareStatement(\n                    \"SELECT * FROM users WHERE id = ? FOR UPDATE\")) {\n                    stmt.setLong(1, id);\n                    stmt.executeQuery();\n                }\n            }\n\n            \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u51e6\u7406\n            \/\/ ...\n\n            conn.commit();\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u30ed\u30c3\u30af\u53d6\u5f97\u5931\u6557\", e);\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-145\">\n<h3 class=\"wp-block-heading\" id=\"i-55\">6.3 \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u9632\u6b62\u306e\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-146\">\n<h4 class=\"wp-block-heading\" id=\"i-56\">\u30ea\u30bd\u30fc\u30b9\u8ffd\u8de1\u30b7\u30b9\u30c6\u30e0<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ResourceTracker {\n    private static final Map&lt;String, Set&lt;AutoCloseable&gt;&gt; resources = \n        new ConcurrentHashMap&lt;&gt;();\n\n    \/\/ \u30ea\u30bd\u30fc\u30b9\u306e\u767b\u9332\n    public static void registerResource(String context, \n                                      AutoCloseable resource) {\n        resources.computeIfAbsent(context, k -&gt; \n            Collections.newSetFromMap(new ConcurrentHashMap&lt;&gt;()))\n            .add(resource);\n    }\n\n    \/\/ \u30ea\u30bd\u30fc\u30b9\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n    public static void cleanupResources(String context) {\n        Set&lt;AutoCloseable&gt; contextResources = resources.remove(context);\n        if (contextResources != null) {\n            for (AutoCloseable resource : contextResources) {\n                try {\n                    resource.close();\n                } catch (Exception e) {\n                    logger.error(\"\u30ea\u30bd\u30fc\u30b9\u306e\u30af\u30ed\u30fc\u30ba\u306b\u5931\u6557: {}\", e.getMessage());\n                }\n            }\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-147\">\n<h4 class=\"wp-block-heading\" id=\"i-57\">\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ResourceManager implements AutoCloseable {\n    private final Connection connection;\n    private final List&lt;Statement&gt; statements = new ArrayList&lt;&gt;();\n    private final List&lt;ResultSet&gt; resultSets = new ArrayList&lt;&gt;();\n\n    public ResourceManager(Connection connection) {\n        this.connection = connection;\n    }\n\n    \/\/ \u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u306e\u4f5c\u6210\u3068\u8ffd\u8de1\n    public PreparedStatement prepareStatement(String sql) \n            throws SQLException {\n        PreparedStatement stmt = connection.prepareStatement(sql);\n        statements.add(stmt);\n        return stmt;\n    }\n\n    \/\/ \u7d50\u679c\u30bb\u30c3\u30c8\u306e\u8ffd\u8de1\n    public void trackResultSet(ResultSet rs) {\n        resultSets.add(rs);\n    }\n\n    @Override\n    public void close() {\n        \/\/ \u7d50\u679c\u30bb\u30c3\u30c8\u306e\u30af\u30ed\u30fc\u30ba\n        for (ResultSet rs : resultSets) {\n            try {\n                if (rs != null &amp;&amp; !rs.isClosed()) {\n                    rs.close();\n                }\n            } catch (SQLException e) {\n                logger.warn(\"ResultSet\u306e\u30af\u30ed\u30fc\u30ba\u306b\u5931\u6557: {}\", e.getMessage());\n            }\n        }\n\n        \/\/ \u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u306e\u30af\u30ed\u30fc\u30ba\n        for (Statement stmt : statements) {\n            try {\n                if (stmt != null &amp;&amp; !stmt.isClosed()) {\n                    stmt.close();\n                }\n            } catch (SQLException e) {\n                logger.warn(\"Statement\u306e\u30af\u30ed\u30fc\u30ba\u306b\u5931\u6557: {}\", e.getMessage());\n            }\n        }\n\n        \/\/ \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u306e\u30af\u30ed\u30fc\u30ba\n        try {\n            if (connection != null &amp;&amp; !connection.isClosed()) {\n                connection.close();\n            }\n        } catch (SQLException e) {\n            logger.warn(\"Connection\u306e\u30af\u30ed\u30fc\u30ba\u306b\u5931\u6557: {}\", e.getMessage());\n        }\n    }\n\n    \/\/ \u4f7f\u7528\u4f8b\n    public static void executeQuery(String sql) {\n        try (ResourceManager manager = new ResourceManager(\n                ConnectionPool.getConnection())) {\n            PreparedStatement stmt = manager.prepareStatement(sql);\n            ResultSet rs = stmt.executeQuery();\n            manager.trackResultSet(rs);\n\n            while (rs.next()) {\n                \/\/ \u7d50\u679c\u306e\u51e6\u7406\n            }\n        } catch (SQLException e) {\n            throw new DatabaseException(\"\u30af\u30a8\u30ea\u5b9f\u884c\u30a8\u30e9\u30fc\", e);\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-148\">\n<p>\u3053\u308c\u3089\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u52b9\u679c\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-149\">\n<p><strong>1. \u30a8\u30e9\u30fc\u306e\u65e9\u671f\u767a\u898b\u3068\u89e3\u6c7a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-150\">\n<p>\u3000\u25cf \u4f53\u7cfb\u7684\u306a\u30a8\u30e9\u30fc\u8a3a\u65ad<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-151\">\n<p>\u3000\u25cf \u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u30fc\u30e1\u30ab\u30cb\u30ba\u30e0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-152\">\n<p>\u3000\u25cf \u8a73\u7d30\u306a\u30a8\u30e9\u30fc\u30ed\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-153\">\n<p><strong>2. \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u306e\u9632\u6b62\u3068\u7ba1\u7406<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-154\">\n<p>\u3000\u25cf \u30ed\u30c3\u30af\u53d6\u5f97\u9806\u5e8f\u306e\u5236\u5fa1<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-155\">\n<p>\u3000\u25cf \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u691c\u51fa\u3068\u81ea\u52d5\u30ea\u30c8\u30e9\u30a4<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-156\">\n<p>\u3000\u25cf \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5206\u96e2\u30ec\u30d9\u30eb\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-157\">\n<p><strong>3. \u30ea\u30bd\u30fc\u30b9\u306e\u9069\u5207\u306a\u7ba1\u7406<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-158\">\n<p>\u3000\u25cf \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-159\">\n<p>\u3000\u25cf \u78ba\u5b9f\u306a\u30ea\u30bd\u30fc\u30b9\u89e3\u653e<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u72b6\u6cc1\u306e\u8ffd\u8de1<\/p>\n\n\n<div id=\"sgb-css-id-160\">\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u624b\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-161\">\n<h2 class=\"wp-block-heading\" id=\"i-58\">\uff17. \u767a\u5c55\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u624b\u6cd5<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-162\">\n<h3 class=\"wp-block-heading\" id=\"i-59\">7.1 ORM\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6d3b\u7528\u65b9\u6cd5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-163\">\n<h4 class=\"wp-block-heading\" id=\"i-60\">JPA\u3068Hibernate\u306e\u5b9f\u88c5\u4f8b<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n@Entity\n@Table(name = \"users\")\n@Getter @Setter\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Column(nullable = false)\n    private String name;\n\n    @Email\n    @Column(unique = true)\n    private String email;\n\n    @CreationTimestamp\n    private LocalDateTime createdAt;\n\n    @OneToMany(mappedBy = \"user\", cascade = CascadeType.ALL)\n    private List&lt;Order&gt; orders = new ArrayList&lt;&gt;();\n}\n\n\/\/ \u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u5b9f\u88c5\n@Repository\npublic class UserRepository {\n    @PersistenceContext\n    private EntityManager entityManager;\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u306e\u5b9f\u88c5\n    public List&lt;User&gt; findActiveUsers(int page, int size) {\n        return entityManager.createQuery(\n            \"SELECT u FROM User u WHERE u.active = true \" +\n            \"ORDER BY u.createdAt DESC\", User.class)\n            .setFirstResult(page * size)\n            .setMaxResults(size)\n            .getResultList();\n    }\n\n    \/\/ \u4ed5\u69d8\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u305f\u52d5\u7684\u30af\u30a8\u30ea\n    public List&lt;User&gt; findBySpecification(Specification&lt;User&gt; spec) {\n        CriteriaBuilder cb = entityManager.getCriteriaBuilder();\n        CriteriaQuery&lt;User&gt; query = cb.createQuery(User.class);\n        Root&lt;User&gt; root = query.from(User.class);\n\n        query.where(spec.toPredicate(root, query, cb));\n\n        return entityManager.createQuery(query)\n            .getResultList();\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-164\">\n<h4 class=\"wp-block-heading\" id=\"i-61\">Spring Data JPA\u306e\u6d3b\u7528<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Spring Data JPA\u30ea\u30dd\u30b8\u30c8\u30ea\n@Repository\npublic interface UserRepository extends JpaRepository&lt;User, Long&gt; {\n    \/\/ \u30e1\u30bd\u30c3\u30c9\u540d\u306b\u3088\u308b\u81ea\u52d5\u30af\u30a8\u30ea\u751f\u6210\n    Optional&lt;User&gt; findByEmail(String email);\n    List&lt;User&gt; findByCreatedAtAfter(LocalDateTime date);\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u306e\u5b9a\u7fa9\n    @Query(\"SELECT u FROM User u WHERE u.lastLoginDate &gt; :date \" +\n           \"AND u.status = :status\")\n    List&lt;User&gt; findActiveUsersSince(\n        @Param(\"date\") LocalDateTime date,\n        @Param(\"status\") UserStatus status);\n\n    \/\/ \u30cd\u30a4\u30c6\u30a3\u30d6SQL\u30af\u30a8\u30ea\u306e\u4f7f\u7528\n    @Query(value = \"SELECT * FROM users WHERE \" +\n           \"EXTRACT(year FROM created_at) = :year\",\n           nativeQuery = true)\n    List&lt;User&gt; findUsersCreatedInYear(@Param(\"year\") int year);\n}<\/pre>\n\n\n<div id=\"sgb-css-id-165\">\n<h3 class=\"wp-block-heading\" id=\"i-62\">7.2 NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a\u624b\u6cd5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-166\">\n<h4 class=\"wp-block-heading\" id=\"i-63\">MongoDB\u9023\u643a\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ MongoDB\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5b9a\u7fa9\n@Document(collection = \"users\")\n@Data\npublic class UserDocument {\n    @Id\n    private String id;\n    private String name;\n    private String email;\n    private Map&lt;String, Object&gt; attributes;\n    private List&lt;Address&gt; addresses;\n\n    @DBRef\n    private List&lt;OrderDocument&gt; orders;\n}\n\n\/\/ MongoTemplate\u3092\u4f7f\u7528\u3057\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\n@Repository\npublic class MongoUserRepository {\n    private final MongoTemplate mongoTemplate;\n\n    public MongoUserRepository(MongoTemplate mongoTemplate) {\n        this.mongoTemplate = mongoTemplate;\n    }\n\n    \/\/ \u9ad8\u5ea6\u306a\u30af\u30a8\u30ea\u306e\u5b9f\u88c5\n    public List&lt;UserDocument&gt; findByAttributesAndLocation(\n            Map&lt;String, Object&gt; attributes,\n            GeoPoint location,\n            double maxDistance) {\n\n        Criteria criteria = Criteria.where(\"attributes\")\n            .all(attributes.entrySet().stream()\n                .map(e -&gt; new BasicDBObject(e.getKey(), e.getValue()))\n                .collect(Collectors.toList()));\n\n        criteria.and(\"addresses.location\")\n            .nearSphere(new Point(\n                location.getLongitude(),\n                location.getLatitude()))\n            .maxDistance(maxDistance);\n\n        Query query = Query.query(criteria);\n        return mongoTemplate.find(query, UserDocument.class);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-167\">\n<h3 class=\"wp-block-heading\" id=\"i-64\">7.3 \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306b\u304a\u3051\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-168\">\n<h4 class=\"wp-block-heading\" id=\"i-65\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5206\u5272\u30d1\u30bf\u30fc\u30f3<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b5\u30fc\u30d3\u30b9\u56fa\u6709\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\n@Service\npublic class UserService {\n    private final UserRepository userRepository;\n    private final OrderServiceClient orderServiceClient;\n\n    \/\/ \u30b5\u30fc\u30d3\u30b9\u9593\u30c7\u30fc\u30bf\u96c6\u7d04\n    public UserDetailsDTO getUserDetails(Long userId) {\n        \/\/ \u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u3092\u53d6\u5f97\n        User user = userRepository.findById(userId)\n            .orElseThrow(() -&gt; new UserNotFoundException(userId));\n\n        \/\/ \u4ed6\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u6ce8\u6587\u60c5\u5831\u3092\u53d6\u5f97\n        List&lt;OrderDTO&gt; orders = orderServiceClient\n            .getOrdersByUserId(userId);\n\n        return new UserDetailsDTO(user, orders);\n    }\n\n    \/\/ \u5206\u6563\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\n    @Transactional\n    public void createUserWithOrder(UserCreateDTO userDTO) {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\uff08\u30ed\u30fc\u30ab\u30eb\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\uff09\n        User user = userRepository.save(\n            new User(userDTO.getName(), userDTO.getEmail()));\n\n        try {\n            \/\/ \u6ce8\u6587\u4f5c\u6210\uff08\u30b5\u30fc\u30d3\u30b9\u9593\u901a\u4fe1\uff09\n            OrderDTO order = orderServiceClient\n                .createOrder(user.getId(), userDTO.getInitialOrder());\n\n            \/\/ \u88dc\u511f\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\n            TransactionCompensator.register(() -&gt; {\n                orderServiceClient.cancelOrder(order.getId());\n                userRepository.delete(user);\n            });\n\n        } catch (Exception e) {\n            \/\/ \u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u51e6\u7406\n            TransactionCompensator.executeCompensation();\n            throw new ServiceException(\"\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u5931\u6557\", e);\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-169\">\n<h4 class=\"wp-block-heading\" id=\"i-66\">\u30c7\u30fc\u30bf\u6574\u5408\u6027\u7ba1\u7406<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DataConsistencyManager {\n    private final KafkaTemplate&lt;String, Event&gt; kafkaTemplate;\n    private final EventRepository eventRepository;\n\n    \/\/ \u30a4\u30d9\u30f3\u30c8\u30bd\u30fc\u30b7\u30f3\u30b0 \u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\n    public void publishDomainEvent(DomainEvent event) {\n        \/\/ \u30a4\u30d9\u30f3\u30c8\u306e\u6c38\u7d9a\u5316\n        EventRecord record = eventRepository.save(\n            new EventRecord(event));\n\n        \/\/ \u30a4\u30d9\u30f3\u30c8\u306e\u767a\u884c\n        kafkaTemplate.send(\"domain-events\", \n            event.getAggregateId(),\n            new Event(record.getId(), event));\n    }\n\n    \/\/ CQRS\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\n    @Service\n    public class UserQueryService {\n        private final UserReadRepository readRepository;\n\n        @KafkaListener(topics = \"user-events\")\n        public void handleUserEvent(UserEvent event) {\n            \/\/ \u8aad\u307f\u53d6\u308a\u30e2\u30c7\u30eb\u306e\u66f4\u65b0\n            switch (event.getType()) {\n                case USER_CREATED:\n                    readRepository.createUserView(event.getData());\n                    break;\n                case USER_UPDATED:\n                    readRepository.updateUserView(event.getData());\n                    break;\n                \/\/ \u305d\u306e\u4ed6\u306e\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n            }\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-170\">\n<p>\u3053\u308c\u3089\u306e\u767a\u5c55\u7684\u306a\u624b\u6cd5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-171\">\n<p><strong>1. \u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-172\">\n<p>\u3000\u25cf ORM\u306b\u3088\u308b\u751f\u7523\u6027\u5411\u4e0a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-173\">\n<p>\u3000\u25cf \u578b\u5b89\u5168\u306a\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-174\">\n<p>\u3000\u25cf \u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u30b3\u30fc\u30c9\u306e\u524a\u6e1b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-175\">\n<p><strong>2. \u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-176\">\n<p>\u3000\u25cf \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306b\u3088\u308b\u5206\u6563\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-177\">\n<p>\u3000\u25cf NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u7279\u6027\u6d3b\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-178\">\n<p>\u3000\u25cf \u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u7ba1\u7406<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-179\">\n<p><strong>3. \u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-180\">\n<p>\u3000\u25cf \u30af\u30ea\u30fc\u30f3\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-181\">\n<p>\u3000\u25cf \u758e\u7d50\u5408\u306a\u8a2d\u8a08<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u306e\u5411\u4e0a<\/p>\n\n\n<div id=\"sgb-css-id-182\">\n<p>\u3053\u308c\u3089\u306e\u624b\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u73fe\u4ee3\u306e\u8907\u96d1\u306a\u30b7\u30b9\u30c6\u30e0\u8981\u4ef6\u306b\u5bfe\u5fdc\u3057\u305f\u5805\u7262\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-183\">\n<h2 class=\"wp-block-heading\" id=\"i-67\">\u307e\u3068\u3081\u3068\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-184\">\n<h4 class=\"wp-block-heading\" id=\"i-68\">1. \u672c\u8a18\u4e8b\u306e\u307e\u3068\u3081<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-185\">\n<p>\u3000Java\u3067\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306b\u3064\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u3092\u89e3\u8aac\u3057\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-186\">\n<p>\u30001. <strong>\u57fa\u672c\u7684\u306a\u5b9f\u88c5<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-187\">\n<p>\u3000\u3000\u25cf JDBC\u3092\u4f7f\u7528\u3057\u305f\u6a19\u6e96\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-188\">\n<p>\u3000\u3000\u25cf \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u3092\u6d3b\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u63a5\u7d9a\u7ba1\u7406<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-189\">\n<p>\u3000\u3000\u25cf PreparedStatement\u306b\u3088\u308b\u5b89\u5168\u306a\u30af\u30a8\u30ea\u5b9f\u884c<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-190\">\n<p>\u30002. <strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-191\">\n<p>\u3000\u3000\u25cf SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u306e\u5b9f\u88c5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-192\">\n<p>\u3000\u3000\u25cf \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u91cd\u8981\u6027<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-193\">\n<p>\u3000\u3000\u25cf \u30af\u30a8\u30ea\u6700\u9069\u5316\u3068\u30d0\u30c3\u30c1\u51e6\u7406\u306b\u3088\u308b\u6027\u80fd\u5411\u4e0a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-194\">\n<p>\u30003. <strong>\u5b9f\u8df5\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-195\">\n<p>\u3000\u3000\u25cf \u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u3078\u306e\u5bfe\u51e6\u65b9\u6cd5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-196\">\n<p>\u3000\u3000\u25cf \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u5bfe\u7b56<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-197\">\n<p>\u3000\u3000\u25cf \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u9632\u6b62\u7b56<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-198\">\n<p>\u30004. <strong>\u767a\u5c55\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-199\">\n<p>\u3000\u3000\u25cf ORM\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6d3b\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-200\">\n<p>\u3000\u3000\u25cf NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-201\">\n<p>\u3000\u3000\u25cf \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u8a2d\u8a08<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-202\">\n<h4 class=\"wp-block-heading\" id=\"i-69\">2. \u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-203\">\n<p>\u3000\u3053\u306e\u8a18\u4e8b\u3067\u5b66\u3093\u3060\u5185\u5bb9\u3092\u3055\u3089\u306b\u767a\u5c55\u3055\u305b\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u5b66\u7fd2\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-204\">\n<p>\u30001. <strong>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6df1\u3044\u7406\u89e3<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-205\">\n<p>\u3000\u3000\u25cf Spring Data JPA<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-206\">\n<p>\u3000\u3000\u25cf MyBatis<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-207\">\n<p>\u3000\u3000\u25cf Hibernate<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-208\">\n<p>\u30002. <strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u30b9\u30ad\u30eb<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-209\">\n<p>\u3000\u3000\u25cf \u6b63\u898f\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-210\">\n<p>\u3000\u3000\u25cf \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-211\">\n<p>\u3000\u3000\u25cf \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-212\">\n<p>\u30003. <strong>\u6700\u65b0\u6280\u8853\u30c8\u30ec\u30f3\u30c9<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-213\">\n<p>\u3000\u3000\u25cf \u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-214\">\n<p>\u3000\u3000\u25cf NewSQL<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-215\">\n<p>\u3000\u3000\u25cf \u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-216\">\n<p>\u30004. <strong>\u904b\u7528\u7ba1\u7406\u30b9\u30ad\u30eb<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-217\">\n<p>\u3000\u3000\u25cf \u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-218\">\n<p>\u3000\u3000\u25cf \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\/\u30ea\u30b9\u30c8\u30a2<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-219\">\n<p>\u3000\u3000\u25cf \u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u6226\u7565<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-220\">\n<h4 class=\"wp-block-heading\" id=\"i-70\">3. \u53c2\u8003\u30ea\u30bd\u30fc\u30b9<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-221\">\n<p>\u3000\u25cf <a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/jdbc\/\">Java\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 \u2013 JDBC\u30ac\u30a4\u30c9<\/a><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-222\">\n<p>\u3000\u25cf <a href=\"https:\/\/spring.io\/projects\/spring-framework\"><\/a><a href=\"https:\/\/spring.io\/projects\/spring-framework\">Spring Framework\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-223\">\n<p>\u3000\u25cf <a href=\"https:\/\/hibernate.org\/orm\/documentation\/\"><\/a><a href=\"https:\/\/hibernate.org\/orm\/documentation\/\">Hibernate\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a><\/p>\n<\/div>\n\n\n<p>\u3000\u25cf <a href=\"https:\/\/mybatis.org\/mybatis-3\/ja\/\"><\/a><a href=\"https:\/\/mybatis.org\/mybatis-3\/ja\/\">MyBatis\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a><\/p>\n\n\n<div id=\"sgb-css-id-224\">\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u5b9f\u88c5\u4f8b\u3084\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u57fa\u306b\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u6d3b\u7528\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u5e78\u3044\u3067\u3059\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306f\u5e38\u306b\u9032\u5316\u3057\u7d9a\u3051\u308b\u5206\u91ce\u3067\u3059\u306e\u3067\u3001\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u3068\u5b9f\u8df5\u3092\u5fc3\u304c\u3051\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":2981,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,67],"tags":[],"class_list":{"0":"post-586","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-java","8":"category-java-setup"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/586","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=586"}],"version-history":[{"count":8,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/586\/revisions"}],"predecessor-version":[{"id":3020,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/586\/revisions\/3020"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/media\/2981"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}