データベースの利用 †概要 †PostgreSQLの環境設定 - 詳細 †以降のチュートリアルで必要となるデータベース及びテーブルを、PostgreSQLで作成します。 JDBC - 詳細 †JDBCを使ったデータベースアクセスの方法を理解します。 INSERT文の実行 - 詳細 †INSERT文を実行することにより、JDBCを使ったデータベースアクセスの基礎を理解します。 UPDATE文の実行 - 詳細 †JDBCを使ったUPDATE文の実行方法を理解します。 DELETE文の実行 - 詳細 †JDBCを使ったDELETE文の実行方法を理解します。 SELECT文の実行 - 詳細 †JDBCを使ったSELECT文の実行方法を理解します。 トランザクション処理 - 詳細 †JDBCを使って、トランザクション処理を伴うデータベースアクセスの実行方法を理解します。 特殊文字のエスケープ - 詳細 †特殊文字をエスケープする必要性と、その方法を理解します。 PreparedStatement?の使用 - 詳細 †PreparedStatement?クラスを使ったSQLの実行方法を理解します。 総合課題 - 詳細 †今までに出てきた知識を活用して、以前に作成した掲示板を改造します。 詳細 †PostgreSQLの環境設定 †PostgreSQLでのデータベース、テーブル作成手順
新しいテーブル作成ウインドウのOKボタンを押下します。 課題 JDBC †JDBC JDBCを使ったデータベースアクセスの基本的な処理の流れは、次のようになります。
使用するDBによって、コネクション取得時にロードするドライバやURLの指定方法が異なります。
INSERT文の実行 †INSERT文の実行 //========================================================== //import //J2SE ・・・1 import java.sql.*; /** * INSERT文を実行するクラス。<br> */ public class DBInsert { //========================================================== //メソッド /** * mainメソッドです。<br> * * @param args コマンドライン引数 * @exception Exception 例外 */ public static void main(String[] args) throws Exception { //コネクション Connection con = null; //ステートメント Statement stm = null; try { //========================================================== //コネクションの取得 //***** JDBCドライバのロード ******* ・・・2 //(DBによってこの記述は異なります) //PostgreSQLの場合 Class.forName("org.postgresql.Driver"); //MySQLの場合 //Class.forName("org.gjt.mm.mysql.Driver"); //Oracleの場合 //Class.forName("oracle.jdbc.driver.OracleDriver"); //********************************** //***** URLを指定してコネクションを取得 ******* ・・・3 //(DBによってこの記述は異なります) //PostgreSQLの場合、第1引数のURLは("jdbc:postgresql://ホスト名:ポート番号/DB名")になります //ユーザ名とパスワードが必要な場合は、このように第2引数, 第3引数に指定します con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/kensyu", "user01", "user01"); //MySQLの場合、第1引数のURLは("jdbc:MySQL://ホスト名:ポート番号/DB名")になります //con = DriverManager.getConnection("jdbc:MySQL://localhost:5432/kensyu", "user01", "user01"); //Oracle JDBC OCI Driverの場合、第1引数のURLは("jdbc:oracle:oci:@接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:oci:@SID", "user01", "user01"); //Oracle JDBC Thin Driverの場合、第1引数のURLは("jdbc:oracle:thin:@ホスト名:ポート番号:接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:SID", "user01", "user01"); //********************************************* //自動コミットをOFFにする ・・・4 //(デフォルトではONになっているので、必ずこのようにしてOFFにすること) con.setAutoCommit(false); //========================================================== //SQLの実行 //コネクションからステートメントを取得 ・・・5 stm = con.createStatement(); //INSERT文を実行して更新行数を取得 ・・・6 int updateLine = stm.executeUpdate("INSERT INTO sampletable(pk, textcolumn, numbercolumn) VALUES('主キーの値', 'テキストの値', 1)"); //更新行数を出力 System.out.println("更新行数=" + updateLine); //========================================================== //コミット ・・・7 con.commit(); } //========================================================== //例外処理 catch(Exception e) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています e.printStackTrace(); //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //ロールバック ・・・8 //コネクションがnullでない場合 if(con != null) { try { //ロールバック con.rollback(); } //ロールバック中に例外が発生した場合 catch(SQLException se) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています se.printStackTrace(); //catchした例外を投げなおす throw se; } } //catchした例外を投げなおす throw e; } //========================================================== //終了処理 finally { //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //リソース解放 ・・・9 //ステートメントがnullでない場合 if(stm != null) { //ステートメントを閉じる stm.close(); } //コネクションがnullでない場合 if(con != null) { //コネクションを閉じる con.close(); } } } } ポイントを整理すると、次のようになります。
課題 UPDATE文の実行 †UPDATE文の実行 //========================================================== //import //J2SE import java.sql.*; /** * UPDATE文を実行するクラス。<br> */ public class DBUpdate { //========================================================== //メソッド /** * mainメソッドです。<br> * * @param args コマンドライン引数 * @exception Exception 例外 */ public static void main(String[] args) throws Exception { //コネクション Connection con = null; //ステートメント Statement stm = null; try { //========================================================== //コネクションの取得 //***** JDBCドライバのロード ******* //(DBによってこの記述は異なります) //PostgreSQLの場合 Class.forName("org.postgresql.Driver"); //MySQLの場合 //Class.forName("org.gjt.mm.mysql.Driver"); //Oracleの場合 //Class.forName("oracle.jdbc.driver.OracleDriver"); //********************************** //***** URLを指定してコネクションを取得 ******* //(DBによってこの記述は異なります) //PostgreSQLの場合、第1引数のURLは("jdbc:postgresql://ホスト名:ポート番号/DB名")になります //ユーザ名とパスワードが必要な場合は、このように第2引数, 第3引数に指定します con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/kensyu", "user01", "user01"); //MySQLの場合、第1引数のURLは("jdbc:MySQL://ホスト名:ポート番号/DB名")になります //con = DriverManager.getConnection("jdbc:MySQL://localhost:5432/kensyu", "user01", "user01"); //Oracle JDBC OCI Driverの場合、第1引数のURLは("jdbc:oracle:oci:@接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:oci:@SID", "user01", "user01"); //Oracle JDBC Thin Driverの場合、第1引数のURLは("jdbc:oracle:thin:@ホスト名:ポート番号:接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:SID", "user01", "user01"); //********************************************* //自動コミットをOFFにする //(デフォルトではONになっているので、必ずこのようにしてOFFにすること) con.setAutoCommit(false); //========================================================== //SQLの実行 //コネクションからステートメントを取得 stm = con.createStatement(); //UPDATE文を実行して更新行数を取得 int updateLine = stm.executeUpdate("UPDATE sampletable SET textcolumn='更新後のテキスト', numbercolumn=3 WHERE pk='主キーの値'"); //更新行数を出力 System.out.println("更新行数=" + updateLine); //========================================================== //コミット con.commit(); } //========================================================== //例外処理 catch(Exception e) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています e.printStackTrace(); //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //ロールバック //コネクションがnullでない場合 if(con != null) { try { //ロールバック con.rollback(); } //ロールバック中に例外が発生した場合 catch(SQLException se) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています se.printStackTrace(); //catchした例外を投げなおす throw se; } } //catchした例外を投げなおす throw e; } //========================================================== //終了処理 finally { //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //リソース解放 //ステートメントがnullでない場合 if(stm != null) { //ステートメントを閉じる stm.close(); } //コネクションがnullでない場合 if(con != null) { //コネクションを閉じる con.close(); } } } } 注意 課題 DELETE文の実行 †DELETE文の実行 //========================================================== //import //J2SE import java.sql.*; /** * DELETE文を実行するクラス。<br> */ public class DBDelete { //========================================================== //メソッド /** * mainメソッドです。<br> * * @param args コマンドライン引数 * @exception Exception 例外 */ public static void main(String[] args) throws Exception { //コネクション Connection con = null; //ステートメント Statement stm = null; try { //========================================================== //コネクションの取得 //***** JDBCドライバのロード ******* //(DBによってこの記述は異なります) //PostgreSQLの場合 Class.forName("org.postgresql.Driver"); //MySQLの場合 //Class.forName("org.gjt.mm.mysql.Driver"); //Oracleの場合 //Class.forName("oracle.jdbc.driver.OracleDriver"); //********************************** //***** URLを指定してコネクションを取得 ******* //(DBによってこの記述は異なります) //PostgreSQLの場合、第1引数のURLは("jdbc:postgresql://ホスト名:ポート番号/DB名")になります //ユーザ名とパスワードが必要な場合は、このように第2引数, 第3引数に指定します con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/kensyu", "user01", "user01"); //MySQLの場合、第1引数のURLは("jdbc:MySQL://ホスト名:ポート番号/DB名")になります //con = DriverManager.getConnection("jdbc:MySQL://localhost:5432/kensyu", "user01", "user01"); //Oracle JDBC OCI Driverの場合、第1引数のURLは("jdbc:oracle:oci:@接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:oci:@SID", "user01", "user01"); //Oracle JDBC Thin Driverの場合、第1引数のURLは("jdbc:oracle:thin:@ホスト名:ポート番号:接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:SID", "user01", "user01"); //********************************************* //自動コミットをOFFにする //(デフォルトではONになっているので、必ずこのようにしてOFFにすること) con.setAutoCommit(false); //========================================================== //SQLの実行 //コネクションからステートメントを取得 stm = con.createStatement(); //DELETE文を実行して更新行数を取得 int updateLine = stm.executeUpdate("DELETE FROM sampletable WHERE pk='主キーの値'"); //更新行数を出力 System.out.println("更新行数=" + updateLine); //========================================================== //コミット con.commit(); } //========================================================== //例外処理 catch(Exception e) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています e.printStackTrace(); //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //ロールバック //コネクションがnullでない場合 if(con != null) { try { //ロールバック con.rollback(); } //ロールバック中に例外が発生した場合 catch(SQLException se) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています se.printStackTrace(); //catchした例外を投げなおす throw se; } } //catchした例外を投げなおす throw e; } //========================================================== //終了処理 finally { //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //リソース解放 //ステートメントがnullでない場合 if(stm != null) { //ステートメントを閉じる stm.close(); } //コネクションがnullでない場合 if(con != null) { //コネクションを閉じる con.close(); } } } } 注意 課題 SELECT文の実行 †SELECT文の実行 //========================================================== //import //J2SE import java.sql.*; /** * SELECT文を実行するクラス。<br> */ public class DBSelect { //========================================================== //メソッド /** * mainメソッドです。<br> * * @param args コマンドライン引数 * @exception Exception 例外 */ public static void main(String[] args) throws Exception { //コネクション Connection con = null; //ステートメント Statement stm = null; //ResultSet ResultSet rs = null; try { //========================================================== //コネクションの取得 //***** JDBCドライバのロード ******* //(DBによってこの記述は異なります) //PostgreSQLの場合 Class.forName("org.postgresql.Driver"); //MySQLの場合 //Class.forName("org.gjt.mm.mysql.Driver"); //Oracleの場合 //Class.forName("oracle.jdbc.driver.OracleDriver"); //********************************** //***** URLを指定してコネクションを取得 ******* //(DBによってこの記述は異なります) //PostgreSQLの場合、第1引数のURLは("jdbc:postgresql://ホスト名:ポート番号/DB名")になります //ユーザ名とパスワードが必要な場合は、このように第2引数, 第3引数に指定します con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/kensyu", "user01", "user01"); //MySQLの場合、第1引数のURLは("jdbc:MySQL://ホスト名:ポート番号/DB名")になります //con = DriverManager.getConnection("jdbc:MySQL://localhost:5432/kensyu", "user01", "user01"); //Oracle JDBC OCI Driverの場合、第1引数のURLは("jdbc:oracle:oci:@接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:oci:@SID", "user01", "user01"); //Oracle JDBC Thin Driverの場合、第1引数のURLは("jdbc:oracle:thin:@ホスト名:ポート番号:接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:SID", "user01", "user01"); //********************************************* //自動コミットをOFFにする //(デフォルトではONになっているので、必ずこのようにしてOFFにすること) con.setAutoCommit(false); //========================================================== //SQLの実行 //コネクションからステートメントを取得 stm = con.createStatement(); //SELECT文を実行して、結果の入ったResultSetのインスタンスを取得 rs = stm.executeQuery("SELECT pk, textcolumn, numbercolumn, datecolumn FROM sampletable"); //========================================================== //ResultSetの読み込み //全てのレコードを読み終えるまでカーソルを進める while(rs.next()) { //カラム「pk」の値をStringで取得 String pk = rs.getString("pk"); //カラム「textcolumn」の値をStringで取得 String textColumn = rs.getString("textcolumn"); //カラム「numbercolumn」の値をintで取得 int numberColumn = rs.getInt("numbercolumn"); //カラム「datecolumn」の値をjava.sql.Dateで取得 //(java.util.Dateでないので注意) Date dateColumn = rs.getDate("datecolumn"); //このようにカラム名の代わりにインデックスを指定して取得することもできます //(インデックスは「0」からではなく、「1」から始まります) //String pk = rs.getString(1); //本来はここで取得した結果をListに入れたりしますが、ここでは単純に標準出力に出力します System.out.println("pk=" + pk); System.out.println("textColumn=" + textColumn); System.out.println("numberColumn=" + numberColumn); System.out.println("dateColumn=" + dateColumn); } //========================================================== //コミット con.commit(); } //========================================================== //例外処理 catch(Exception e) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています e.printStackTrace(); //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //ロールバック //コネクションがnullでない場合 if(con != null) { try { //ロールバック con.rollback(); } //ロールバック中に例外が発生した場合 catch(SQLException se) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています se.printStackTrace(); //catchした例外を投げなおす throw se; } } //catchした例外を投げなおす throw e; } //========================================================== //終了処理 finally { //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //リソース解放 //ステートメントがnullでない場合 if(stm != null) { //ステートメントを閉じる stm.close(); } //コネクションがnullでない場合 if(con != null) { //コネクションを閉じる con.close(); } } } } ResultSet?クラス
課題 トランザクション処理 †トランザクション処理とは トランザクション処理を伴うデータベースアクセスの実行 //========================================================== //import //J2SE import java.sql.*; /** * トランザクション処理を伴うデータベースアクセスを実行するクラス。<br> */ public class DBTransaction { //========================================================== //メソッド /** * mainメソッドです。<br> * * @param args コマンドライン引数 * @exception Exception 例外 */ public static void main(String[] args) throws Exception { //コネクション Connection con = null; //ステートメント Statement stm = null; try { //========================================================== //コネクションの取得 //***** JDBCドライバのロード ******* //(DBによってこの記述は異なります) //PostgreSQLの場合 Class.forName("org.postgresql.Driver"); //MySQLの場合 //Class.forName("org.gjt.mm.mysql.Driver"); //Oracleの場合 //Class.forName("oracle.jdbc.driver.OracleDriver"); //********************************** //***** URLを指定してコネクションを取得 ******* //(DBによってこの記述は異なります) //PostgreSQLの場合、第1引数のURLは("jdbc:postgresql://ホスト名:ポート番号/DB名")になります //ユーザ名とパスワードが必要な場合は、このように第2引数, 第3引数に指定します con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/kensyu", "user01", "user01"); //MySQLの場合、第1引数のURLは("jdbc:MySQL://ホスト名:ポート番号/DB名")になります //con = DriverManager.getConnection("jdbc:MySQL://localhost:5432/kensyu", "user01", "user01"); //Oracle JDBC OCI Driverの場合、第1引数のURLは("jdbc:oracle:oci:@接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:oci:@SID", "user01", "user01"); //Oracle JDBC Thin Driverの場合、第1引数のURLは("jdbc:oracle:thin:@ホスト名:ポート番号:接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:SID", "user01", "user01"); //********************************************* //自動コミットをOFFにする //(デフォルトではONになっているので、必ずこのようにしてOFFにすること) con.setAutoCommit(false); //========================================================== //SQLの実行 //コネクションからステートメントを取得 stm = con.createStatement(); //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //トランザクション処理を行うには、ここで複数のSQLを実行します //UPDATE文を実行して更新行数を取得 int updateLine = stm.executeUpdate("UPDATE sampletable SET textcolumn='更新後のテキスト', numbercolumn=3 WHERE pk='主キーの値'"); //更新行数を出力 System.out.println("1つ目のSQLの更新行数=" + updateLine); //INSERT文を実行して更新行数を取得 updateLine = stm.executeUpdate("INSERT INTO sampletable(pk, textcolumn, numbercolumn) VALUES('主キーの値2', 'テキストの値2', 2)"); //更新行数を出力 System.out.println("2つ目のSQLの更新行数=" + updateLine); //わざと例外が発生するSQLを実行 //(ここで例外が発生するとトランザクションがロールバックされるので、上の2つのSQLの更新結果はデータベースに反映されません) updateLine = stm.executeUpdate("例外が発生するSQL文"); //========================================================== //コミット con.commit(); } //========================================================== //例外処理 catch(Exception e) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています e.printStackTrace(); //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //ロールバック //コネクションがnullでない場合 if(con != null) { try { //ロールバック con.rollback(); } //ロールバック中に例外が発生した場合 catch(SQLException se) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています se.printStackTrace(); //catchした例外を投げなおす throw se; } } //catchした例外を投げなおす throw e; } //========================================================== //終了処理 finally { //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //リソース解放 //ステートメントがnullでない場合 if(stm != null) { //ステートメントを閉じる stm.close(); } //コネクションがnullでない場合 if(con != null) { //コネクションを閉じる con.close(); } } } } 課題 特殊文字のエスケープ †特殊文字をエスケープする必要性 補足 実装 課題 PreparedStatement?の使用 †PreparedStatement?クラス PreparedStatement?を使ったSQLの実行 //========================================================== //メソッド /** * mainメソッドです。<br> * * @param args コマンドライン引数 * @exception Exception 例外 */ public static void main(String[] args) throws Exception { //コネクション Connection con = null; //PreparedStatement PreparedStatement preStm = null; try { //========================================================== //コネクションの取得 //***** JDBCドライバのロード ******* ・・・2 //(DBによってこの記述は異なります) //PostgreSQLの場合 Class.forName("org.postgresql.Driver"); //MySQLの場合 //Class.forName("org.gjt.mm.mysql.Driver"); //Oracleの場合 //Class.forName("("oracle.jdbc.driver.OracleDriver"); //********************************** //***** URLを指定してコネクションを取得 ******* ・・・3 //(DBによってこの記述は異なります) //PostgreSQLの場合、第1引数のURLは("jdbc:postgresql://ホスト名:ポート番号/DB名")になります //ユーザ名とパスワードが必要な場合は、このように第2引数, 第3引数に指定します con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/kensyu", "user01", "user01"); //MySQLの場合、第1引数のURLは("jdbc:MySQL://ホスト名:ポート番号/DB名")になります //con = DriverManager.getConnection("jdbc:MySQL://localhost:5432/kensyu", "user01", "user01"); //Oracle JDBC OCI Driverの場合、第1引数のURLは("jdbc:oracle:oci:@ホスト名:ポート番号:接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:oci:@SID", "user01", "user01"); //Oracle JDBC Thin Driverの場合、第1引数のURLは("jdbc:oracle:thin:@ホスト名:ポート番号:接続するデータベースのSID")になります //con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:SID", "user01", "user01"); //********************************************* //自動コミットをOFFにする ・・・4 //(デフォルトではONになっているので、必ずこのようにしてOFFにすること) con.setAutoCommit(false); //========================================================== //SQLの実行 //コネクションからPreparedStatementを取得 //(値を設定する場所には、「?」を指定しておきます) preStm = con.prepareStatement("INSERT INTO sampletable(pk, textcolumn, numbercolumn) VALUES(?, ?, ?)"); //1つ目の「?」に文字列の値を設定 //(「'」で両端を囲む必要はありません) preStm.setString(1, "PreparedStatementで設定した主キーの値"); //2つ目の「?」に文字列の値を設定 //(「'」が含まれていても自動的にエスケープされます) preStm.setString(2, "PreparedStatementで設定した'テキスト'の値"); //2つ目の「?」にintの値を設定 preStm.setInt(3, 100); //SQLを実行して更新行数を取得 int updateLine = preStm.executeUpdate(); //更新行数を出力 System.out.println("更新行数=" + updateLine); //========================================================== //コミット con.commit(); } //========================================================== //例外処理 catch(Exception e) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています e.printStackTrace(); //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //ロールバック //コネクションがnullでない場合 if(con != null) { try { //ロールバック con.rollback(); } //ロールバック中に例外が発生した場合 catch(SQLException se) { //本来はここでログ出力などの処理を行いますが、ここでは例外内容をそのまま出力しています se.printStackTrace(); //catchした例外を投げなおす throw se; } } //catchした例外を投げなおす throw e; } //========================================================== //終了処理 finally { //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ //リソース解放 //ステートメントがnullでない場合 if(preStm != null) { //ステートメントを閉じる preStm.close(); } //コネクションがnullでない場合 if(con != null) { //コネクションを閉じる con.close(); } } } } PreparedStatement?クラスの具体的な使用方法は、次のようになります。
課題 総合課題 † |