解答例 - 実習課題4 - 5.ResultSetを用いた更新処理
(実習課題4)
PostgreSQLのJDBCドライバの可視性を調べなさい。
解答例
▼データベースアクセス用クラスのソース
package com.techscore.jdbc.chapter5.exercise4; /** * CheckFunctionDAO.java * TECHSCORE JDBC5章 実習課題4 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ import java.sql.Connection; import java.sql.SQLException; import java.sql.DriverManager; import java.sql.DatabaseMetaData; import java.sql.ResultSet; public class CheckFunctionDAO{ private Connection conn = null; private Connection getConnection() throws SQLException,ClassNotFoundException{ Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection("jdbc:postgresql://dbserver:5432/Training" ,"postgres" //ユーザ名 ,""); //パスワード conn.setAutoCommit(false); //自動コミットモード解除 return conn; } public boolean[][] isFunction() throws SQLException,ClassNotFoundException{ boolean[][] result = new boolean[9][3]; conn = getConnection(); DatabaseMetaData metaData = conn.getMetaData(); int type[] = { ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE }; boolean aaa = metaData.ownInsertsAreVisible(type[0]); for(int i=0; i < type.length; i++){ result[0][i] = metaData.ownInsertsAreVisible(type[i]); result[1][i] = metaData.ownUpdatesAreVisible(type[i]); result[2][i] = metaData.ownDeletesAreVisible(type[i]); result[3][i] = metaData.othersInsertsAreVisible(type[i]); result[4][i] = metaData.othersUpdatesAreVisible(type[i]); result[5][i] = metaData.othersDeletesAreVisible(type[i]); result[6][i] = metaData.insertsAreDetected(type[i]); result[7][i] = metaData.updatesAreDetected(type[i]); result[8][i] = metaData.deletesAreDetected(type[i]); } finishTransaction(); return result; } private void finishTransaction() throws SQLException{ if (conn != null){ conn.close(); } } }
▼Product(製品)情報管理クラスのソース
▼テーブル表示ウィンドウ作成クラスのソース
package com.techscore.jdbc.chapter5.exercise4; /** * DisplayCheckedResult.java * TECHSCORE JDBC5章 実習課題4 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ import java.sql.SQLException; public class DisplayCheckedResult{ private static String[] type ={ "TYPE_FORWARD_ONLY ", "TYPE_SCROLL_INSENSITIVE", "TYPE_SCROLL_SENSITIVE "}; private static String[] function ={"挿入された行を参照できるか ", "変更された行を参照できるか ", "削除された行が判別できるか ", "他から挿入された行を参照できるか", "他から変更された行を参照できるか", "他から削除された行が判別できるか", "「rowInserted」メソッドで対象行 \nが挿入されたものである事を検出で\nきるか ", "「rowUpdated」メソッドで対象行に\n変更があったことを検出できるか ", "「rowDeleted」メソッドで対象行が\n削除された事を検出できるか " }; private static void displayResult(boolean[][] result){ System.out.println("\t\t\t\t\t"+ type[0] + "\t"+ type[1] + "\t"+ type[2]); System.out.println("================================================================================================================="); for(int i=0; i < function.length; i++){ StringBuffer sb = new StringBuffer(); for(int j=0; j < type.length; j++){ if(j==0){ sb.append(function[i] + "\t"); } if(result[i][j]){ sb.append("|○できる \t\t"); }else{ sb.append("|×できない\t\t"); } } sb.append("\n================================================================================================================="); System.out.println(sb); } } public static void main(String[] args) { CheckFunctionDAO checkFunction = new CheckFunctionDAO(); try{ boolean[][] result = checkFunction.isFunction(); displayResult(result); }catch(SQLException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); } } }
▼データベースの指定
▼実行結果例
============== TYPE_FORWARD_ONLY TYPE_SCROLL_INSENSITIVE TYPE_SCROLL_SENSITIVE ================================================================================================================= 挿入された行を参照できるか |○できる |○できる |○できる ================================================================================================================= 変更された行を参照できるか |○できる |○できる |○できる ================================================================================================================= 削除された行が判別できるか |○できる |○できる |○できる ================================================================================================================= 他から挿入された行を参照できるか |×できない |×できない |×できない ================================================================================================================= 他から変更された行を参照できるか |×できない |×できない |×できない ================================================================================================================= 他から削除された行が判別できるか |×できない |×できない |×できない ================================================================================================================= 「rowInserted」メソッドで対象行 が挿入されたものである事を検出で きるか |×できない |×できない |×できない ================================================================================================================= 「rowUpdated」メソッドで対象行に 変更があったことを検出できるか |×できない |×できない |×できない ================================================================================================================= 「rowDeleted」メソッドで対象行が 削除された事を検出できるか |×できない |×できない |×できない ================================================================================================================= ==============