解答例 - 実習課題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」メソッドで対象行が
削除された事を検出できるか |×できない |×できない |×できない
=================================================================================================================
==============

