英語マニュアル
EDBのPostgres ™Advanced Serverの
JDBCコネクタガイド
•
第 5.3 節は、Advanced Serverデータベースへの問い合わせ方法を示しています。
•
6 章では、 executeUpdate()メソッドを使用してSQLコマンドを実行する方法について説明します。
•
セクション 8.3では、ストアドプロシージャを呼び出すためのさまざまな方法について説明しています。
•
セクション 8.4では、JavaでのREF CURSOR宣言と使用方法を示します。
•
セクション 8.5は、 BYTEAデータをJavaで使用するBYTEA示しています。
•
セクション 8.6は、Javaでオブジェクト型とコレクションを使用する方法を示しています。
以下の説明において、 用語は、言語キーワード、ユーザ指定の値、リテラルなどであり得る任意の単語または単語のグループを指す。用語の正確な意味は、それが使用される文脈に依存する。
•
イタリック体のフォント は、通常は初めて定義する文章の中に新しい用語を導入します。
•
Fixed-width (mono-spaced) font は、 SQL コマンド、例で使用されている特定のテーブル名および列名、プログラミング言語のキーワード など、文字通りに指定する必要がある用語に使用され ます 。例えば、 SELECT * FROM emp;
•
Italic fixed-width font は、ユーザーが実際の使用法で値を置き換える必要がある用語に使用されます。例えば、 DELETE FROM table_name ;
•
角括弧[]は、囲まれた用語の1つまたはすべてを置換できることを示します。たとえば、 [ a | b ] 、「 a 」または「 b 」のいずれかを選択するか、または両方を選択しないことを意味します。
•
中括弧{}は、囲まれた選択肢のうち1つだけを指定する必要があることを示します。たとえば、 { a | b }正確に一つ「の意味a 」又は「 b 」を指定しなければなりません。
•
省略記号...は、前の用語が繰り返される可能性があることを示します。たとえば、 [ a | b ] ...は、シーケンス「 baaba 」があるかもしれないことを意味します。
•
•
JDBC_interface
JDBC_Core_API
図2.3は、一般的なJDBCアプリケーションにおけるDriverManagerクラスの役割を示しています。 DriverManagerは、Javaアプリケーションとバックエンドデータベース間のブリッジとして機能し、ターゲットデータベースに使用するJDBCドライバを決定します。
JDBC_DriverMgr
3
1.6
4
1.7
4.1
1.8
4.2
2。
edb-jdbc16.jarファイルは、PowerPC 64リトルエンディアン(ppc64le)上のLinuxには使用できません。
詳細なインストール手順は 、同じページの関連する Docsリンクから入手できます。
Advanced Server用のリポジトリファイルを作成するパッケージの名前は edb-repoです。このパッケージは次の場所からダウンロードできます。
リポジトリ設定ファイルをダウンロードした後、スーパーユーザー特権を引き受け 、次のコマンドを使用してリポジトリ設定ファイルを作成します。
インストーラによって、 edb という名前のリポジトリ設定ファイルが作成されます 。 repo ;ファイルは/etc/yum.repos.dます。このファイルには、各EnterpriseDBリポジトリのエントリが含まれています。コネクタをインストールするには、 enterprisedb - toolsリポジトリのエントリを有効にする必要があります。
1。
baseurl仕様の user _ nameとpasswordプレースホルダをあなたのユーザ名とリポジトリのパスワードに置き換えてください。
2。
置き換え 0の隣にenabledして1 。
リポジトリー構成ファイルの内容を変更したら、 yum installコマンドを使用してコネクターをインストールできます。以下のコマンドを使用してください。
各コマンドは /etc/zypp/repos.dディレクトリにリポジトリ設定ファイルを作成します 。ファイル名は次のとおりです。
リポジトリ設定ファイルを作成したら、 zypper refreshコマンドを使用してSLESホスト上のメタデータを更新し、EnterpriseDBリポジトリを含めます。
入力を求められたら User NameとPassword 、EnterpriseDBのリポジトリ用の接続の資格情報を提供しています。認証情報が必要な場合は、EnterpriseDBに連絡してください。
Language Selectionポップアップが開いたら、インストール言語を選択し、 OKをクリックしてSetupウィンドウに進みます(図3.1)。
Nextをクリックして続けます。
[ Installation Directory ]ダイアログ(図3.2を参照)を使用してコネクタをインストールするディレクトリを指定し、[ Nextへ]をクリックして続行します。
InstallのReadyダイアログ(図3.3参照)でNextをクリックし to Installを開始します。ポップアップダイアログがインストールウィザードの進行状況を確認します。
セットアップが完了したことがウィザードから通知されたら、[ Finish ]ボタンをクリックしてダイアログをFinishます(図3.4を参照)。
StackBuilder Plusが開いたら、画面上の指示に従います。ツリーコントロールの[ Database Driversノードから[ EnterpriseDB JDBC Connector ]オプションを選択し JDBC Connector (図3.6を参照)。
•
edb-jdbc16.jarはJDBCバージョン4をサポートします
•
edb-jdbc17.jarはJDBCバージョン4.1をサポートします
•
edb-jdbc18.jarはJDBCバージョン4.2をサポートします
注: edb-jdbc16.jarファイルは、PowerPC 64リトルエンディアン(ppc64le)上のLinuxでは使用できません。
JDBCドライバをJavaで利用できるようにするには、使用しているJDBCバージョンに適したjava .jarファイルを$ java_home /jre/lib/extディレクトリにコピーするか、または.jarファイルの場所をCLASSPATH必要があります。環境変数
jarファイルの場所を CLASSPATH環境変数に追加することを選択した場合は、絶対パス名を含める必要があります。
JavaとAdvanced Server JDBC Connectorが配置されていれば、JavaアプリケーションはAdvanced Serverデータベースにアクセスできます。 リスト1.1は、クエリを実行して結果セットを印刷するアプリケーションを作成します。
{
}
•
Advanced Server JDBCドライバはJavaで書かれており、コンパイル済みJAR(Java Archive)ファイルの形式で配布されています。 Class 使用してください 。ドライバをロードするためのforName ()メソッド。 forName ()メソッドは、実行時にJavaクラスを動的にロードします。アプリケーションがforName ()メソッドを呼び出すと、JVM(Java Virtual Machine)は要求されたクラスを実装するコンパイル済みフォーム(バイトコード)を見つけようとします。
ドライバのバイトコードをロードした後、ドライバは現在のシステムにインストールされているすべてのJDBCドライバの管理を担当する別のJDBCクラス( DriverManager )に自分自身を登録します。
JVMが名前付きドライバを見つけることができない場合、 ClassNotFound例外(プログラムの終わり近くでcatchブロックでインターセプトされる)をスローし ClassNotFound 。 DriverManagerは、複数のJDBCドライバオブジェクトを処理するように設計されています。 JDBCを介して複数のデータベースシステムに接続するJavaアプリケーションを書くことができます。次のセクションでは、特定のドライバを選択する方法について説明します。
ドライバがロードされて DriverManager 登録された後、 ListEmployeesクラスは次のコードに示すようにデータベースサーバへの接続を試みることができます。
すべてのJDBC接続は DriverManager から始まります 。 DriverManagerクラスは、データベースへの接続を作成する責任を負うgetConnection()という静的メソッドを提供します。 getConnection()メソッドを呼び出すときには、 DriverManagerがデータベースへの接続に使用するJDBCドライバを決定する必要があります。その決定は、 getConnection().渡すURL(Uniform Resource Locator)に基づいていますgetConnection().
JDBC URLの最初のコンポーネントは常に jdbcです。 Advanced Server JDBC Connectorを使用する場合、2番目のコンポーネント(ドライバ)はedbです。
jdbc:edb:< database >
jdbc:edb://< host >/< database >
jdbc:edb://< host >:< port >/< database >
標準の接続パラメータに加えて、Advanced Server JDBCドライバは、EnterpriseDB固有の動作を制御する接続プロパティをサポートしています。これらのプロパティは接続URLで指定するか、 DriverManager.getConnection().渡されるPropertiesオブジェクトパラメータとして指定できます DriverManager.getConnection().リスト1.2は、 Propertiesオブジェクトを使って追加の接続プロパティを指定する方法を示しています。
注:デフォルトでは、 SSL = trueと接続URLパラメーターsslfactory = org.postgresql.ssl.NonValidatingFactoryの設定は、接続を暗号化しますが、SSL証明書を検証しません。証明書の検証を強制するには、 カスタムSSLSocketFactoryを使用する必要があります。
カスタムSSLSocketFactoryの 作成方法の詳細については 、以下を参照してください。
ssl
loglevel The value of 's current value for LogStream or LogWriter 's current value for DriverManager 's current value for LogStream determines the amount of detail printed to the . It currently supports values of:
Set the value of loglevel to INFO to include sparse log information or to Set the value of loglevel to to include sparse log information or to DEBUG to produce significant detail.
charSet The value of determines the character set used for data sent to or received from the database.
prepareThreshold The value of executions required before switching to server side prepared statements. The default is five. PreparedStatement executions required before switching to server side prepared statements. The default is five. determines the number of executions required before switching to server side prepared statements. The default is five.
Allows opening connections to only servers with the required state. The allowed values are any , master , secondary , preferSecondary , and preferSyncSecondary . The master/secondary distinction is currently done by observing if the server allows writes. The value preferSecondary . The master/secondary distinction is currently done by observing if the server allows writes. The value tries to connect to secondaries if any are available, otherwise allows connecting to the master. The Advanced Server JDBC Connector supports preferSyncSecondary tries to connect to secondaries if any are available, otherwise allows connecting to the master. The Advanced Server JDBC Connector supports preferSyncSecondary , which permits connection to only synchronous secondaries or the master if there are no active synchronous secondaries. See Section preferSyncSecondary for information on 5.2.2 , which permits connection to only synchronous secondaries or the master if there are no active synchronous secondaries. See Section . Note: The values slave , preferSlave , and preferSyncSlave have been deprecated as they have been replaced by the “secondary” values. The “slave” values are currently still supported, and the use of the terms “slave” and “secondary” provide the same functionality, however, it is advised to use the “secondary” values.
true , column names from the When set to , column names from the RETURNING clause are not quoted. This eliminates a case-sensitive comparison of the column name. When set to , column names from the clause are not quoted. This eliminates a case-sensitive comparison of the column name. When set to false clause are not quoted. This eliminates a case-sensitive comparison of the column name. When set to false (the default setting), column names are quoted.
Advanced Server JDBC Connectorは 、 表5–2に示すように、 targetServerType接続プロパティのオプション preferSyncSecondaryをサポートしています 。
注:の使用targetServerType値slave 、 preferSlave 、及びpreferSyncSlave値としてすべての機能の同一の対応するセットを提供するsecondary 、 preferSecondary 、及びpreferSyncSecondaryが「スレーブ」の値が推奨されています。 「二次」値を使用することをお勧めします。
preferSyncSecondaryオプションは、フェイルオーバー接続用の同期、スタンバイサーバの優先を提供し、従って非同期サーバを無視します。
jdbc:edb:// master : port , secondary_1 : port_1 , secondary_2 : port_2 ,.../
database ?targetServerType=preferSyncSecondary
master : port
masterデータベースサーバに割り当てられたIPアドレスまたは名前の後にポート番号を続けたもの。 masterが名前の場合は、Javaプログラムを実行しているホストの/etc/hostsファイルにIPアドレスを指定して指定する必要があります。 注:マスターデータベースサーバは、リスト内の任意の場所に指定できます。セカンダリデータベースサーバの前に置く必要はありません。
secondary_n : port_n
スタンバイセカンダリデータベースサーバに割り当てられているIPアドレスまたは名前の後にポート番号を続けたもの。 secondary_nが名前の場合は、Javaプログラムを実行しているホスト上の/etc/hostsファイルにIPアドレスを指定して指定する必要があります。
以下の特性が preferSyncSecondaryオプションに適用されます。
•
接続試行の順序は 、 表5–2で説明されているように、 loadBalanceHosts接続プロパティによって決まります。無効の場合(デフォルト設定)、接続の試行は接続リストで指定されている左から右の順に行われます。有効にした場合、接続の試行はランダムに行われます。
preferSyncSecondaryオプションに使用する同期セカンダリは 、ホットスタンバイで使用するように設定する必要があります。
preferSyncSecondaryオプションに必要なホットスタンバイの使用法に関する一般的な情報については、 preferSyncSecondary The PostgreSQL Core Documentationを参照してください。
マスタからセカンダリデータベースサーバのベースバックアップを作成する方法については、セクション25.3.2、 ベースバックアップの作成 ( pg_basebackupユーティリティプログラムの使用方法について)またはセクション25.3.3、 低レベルAPIを使用したベースバックアップの作成を 参照してください。次の場所にあるPostgreSQLコアドキュメントのセクション25.3 連続アーカイブとポイントインタイムリカバリ(PITR)内
•
ホスト192.168.2.22、ポート5445上のsecondary1 という名前の secondary1 データベースサーバー
•
ホスト192.162.2.24、ポート5446上のsecondary2 という名前の secondary2 データベースサーバー (マスターと同じホスト)
マスタデータベースサーバの pg_hba.confファイルには、すべてのセカンダリデータベースサーバの一意の各レプリケーションデータベースUSER / ADDRESS組み合わせに対するレプリケーションエントリが必要です。次の例では、スーパーユーザーenterprisedbが、192.168.2.22上のsecondary2データベースサーバーと、マスターに対してローカルなsecondary1データベースサーバーの両方のレプリケーションデータベースユーザーとして使用されています。
マスターデータベースサーバがそのpg_hba.confファイルと一緒にpostgresql.confファイルで設定された後 、データベースサーバsecondary1は、 secondary1に対してホスト192.168.2.22でsecondary1コマンドを呼び出すことによって作成されます。
セカンダリデータベースサーバー /opt/secondary1では、 recovery.confファイルがデータベースクラスタ内に生成されます。次の例では、 primary_conninfo文字列の一部としてapplication_name=secondary1設定を追加し、一部のファイルを削除しています。 pg_basebackupによって自動的に生成された他の不要なオプション。 standby_mode = 'on'パラメータの使用にも注意してください。
アプリケーション名 secondary1は、masterデータベースサーバのpostgresql.confファイルのsynchronous_standby_namesパラメータに含める必要があります。
セカンダリデータベースサーバ secondary2は、マスターが使用するのと同じホスト上に別の方法で作成されます 。
セカンダリデータベースサーバー /opt/secondary2で、データベースクラスタにrecovery.confファイルを作成します。次の例に示すように、 primary_conninfo文字列の一部としてapplication_name=secondary2設定されているapplication_name=secondary2注意してください。また、 standby_mode = 'on'パラメータを必ず含めてください。
アプリケーション名 secondary2は、masterデータベースサーバのpostgresql.confファイルのsynchronous_standby_namesパラメータに含める必要があります。
セカンダリデータベースサーバのpostgresql.confファイルの設定パラメータ設定が正しく設定されていることを確認してください 。特にhot_standby=on 。
次の表に、セカンダリデータベースサーバーと比較した、マスターデータベースサーバーの基本的な postgresql.conf構成パラメータ設定を示します。
on
off
cp %p / archive_dir /%f
n/a
hot_standby (9.5 or earlier), replica (9.6 or later)
n (positive integer)
0
n (positive integer)
0
n ( 2次1 ,
secondary2 ,...)
n/a
List of standby servers for synchronous replication. Must be present to enable synchronous replication. These are obtained from the file of each standby server. recovery.conf file of each standby server. parameter in the primary_conninfo parameter in the application_name option of the List of standby servers for synchronous replication. Must be present to enable synchronous replication. These are obtained from the file of each standby server.
off
on
セカンダリデータベースサーバ secondary1が起動されます。
セカンダリデータベースサーバ secondary2が起動されます。
Javaプログラムを実行しているホスト上の /etc/hostsファイルには、接続URLストリングで指定されたサーバー名を持つ以下のエントリーが含まれています。
注:接続URLの名前secondary1およびsecondary2は、 primary_conninfo 、 primary_conninfoおよびsynchronous_standby_namesパラメーターで指定されたアプリケーション名と一致しますが、これは必須要件ではありません。接続URLの名前は、 primary_conninfoおよびsynchronous_standby_namesパラメータで指定されたアプリケーション名とは無関係です。
この例では、上に作られた第1の使用の試みに好適同期二次接続オプション結果 secondary1 、その後にsecondary2場合secondary1アクティブでない場合、上のmasterの両方場合secondary1とsecondary2表示次のプログラムによって示されるようにアクティブでありません接続先のデータベースサーバのIPアドレスとポート。
{
}
ケース1:すべてのデータベースサーバがアクティブなとき、192.168.2.22ポート5445でsecondary1に接続されます。
ケース2: secondary1がシャットダウンされると、192.168.2.24ポート5446でsecondary2に接続されます。
ケース3: secondary2もシャットダウンされると、192.168.2.24ポート5444でmasterに接続されます。
Statementオブジェクトは、SQL文をデータベースに送信します。 Statementオブジェクトには3種類あります。それぞれが特定のタイプのSQLステートメントを送信するように特殊化されています。
•
Statementオブジェクトは、パラメータなしで簡単なSQL文を実行するために使用されます。
•
PreparedStatementオブジェクトは、またはINパラメータなしで事前にコンパイルされたSQL文を実行するために使用されます。
•
CallableStatementオブジェクトは、データベースのストアドプロシージャの呼び出しを実行するために使用されます。
SQL文を実行する前に、 Statementオブジェクトを構築する必要があります。 Statementオブジェクトは、サーバーにSQLステートメントを送信する(そして結果セットにアクセスする)方法を提供します。各StatementオブジェクトはConnection属します。 ConnectionにStatementオブジェクトの作成を依頼するには、 createStatement ()メソッドを使用します。
Statementオブジェクトは、SQL文の種類を実行するためのいくつかのメソッドを定義します。サンプルアプリケーションでは、 executeQuery()メソッドがSELECTステートメントを実行します。
executeQuery実行したいSQL文:()メソッドは、単一の引数を期待しています。 executeQuery ()は、 ResultSetオブジェクト内のクエリからデータを返します。提供されたSQLステートメントの実行中にサーバーがエラーを検出した場合、サーバーはSQLExceptionスローします(そしてResultSet返しません)。
JDBCコネクタ(Advanced Serverバージョン9.6以降)は、 CallableStatement オブジェクトを インスタンス化するときの名前付きパラメータの使用をサポートしてい ます。この構文はJDBCがサポートする構文の拡張であり、JDBC標準には準拠していません。
CallableStatementオブジェクトを使用して、パラメータ値をストアドプロシージャに渡すことができます。 CallableStatement オブジェクトを使用して、 IN 、 OUT 、およびINOUTパラメータに値を割り当てることができます。
CallableStatement クラス を使用するときは、 序数表記または名前表記を使用して実際の引数の値を指定できます。 ステートメント内の 各 IN または INOUT パラメーター・マーカーに 値を設定する必要があり ます。
序数表記を使用して CallableStatement オブジェクトに 値を渡す場合 は、パラメータ型に対応する設定メソッドを使用する必要があります。たとえば、 STRING 値 を渡すとき は、 setString セッターメソッドを 使用し ます。ステートメント内の各パラメーター・マーカー( ? )は序数値を表します。序数パラメータを使用するときは、仮引数が手続き定義内で指定されている順序で実際のパラメータ値を文に渡す必要があります。
CallableStatement オブジェクトの 引数値を指定するときに名前付きパラメーター表記を使用することもでき ます。名前付きパラメーター表記を使用すると、許容可能なデフォルト値を持つパラメーターを省略して、手順で必要なパラメーターのみに値を指定できます。名前付きパラメータを任意の順序で指定することもできます。
名前表記法を使用する場合、各パラメータ名に対応している必要があり COLUMN _ NAME の呼び出しによって返さ DatabaseMetaData 。 getProcedureColumns メソッドステートメント呼び出しに名前付きパラメーターを含める場合は、=>トークンを使用してください。
registerOutParameter メソッドを 使用 して、ステートメント内の 各 OUT または INOUT パラメータマーカー を識別し ます。
例
次の例は、 CallableStatementメソッドを使用して、次のシグネチャを持つプロシージャにパラメータをCallableStatement方法を示しています。
ResultSetオブジェクトは、SQL文によって返されるデータのためのプライマリストレージメカニズムです。各ResultSetオブジェクトには、データとメタデータの両方( ResultSetMetaDataオブジェクトの形式)が含まれています。 ResultSetMetaDataは、SQLコマンドによって返される結果に関する有用な情報(列名、列数、行数、列の長さなど)が含まれています。
格納された行データにアクセスするため ResultSetオブジェクトを、アプリケーションは、1つのまたは複数のゲッターメソッドを呼び出します。 ゲッターメソッドは、現在の行の特定の列の値を取得します。さまざまなゲッターメソッドがあります。各メソッドは特定の型の値を返します。たとえば、 getString ()メソッドはSTRING型を返します。 getDate ()メソッドはDate返し、 getInt ()メソッドはINT型を返します。アプリケーションは、getterメソッドを呼び出すと、JDBCは、要求された型に値を変換しようとします。
各 ResultSetは、現在の行を指す内部ポインタを保持しています。 executeQuery ()メソッドがResultSet返すと、ポインタは最初の行の前に配置されます。アプリケーションは、ポインタを移動する前にgetterメソッドを呼び出す場合、getterメソッドは失敗します。次の(または最初の)行に進むには、 ResultSetのnext()メソッドを呼び出します。 ResultSet 。 next()はブールメソッドです。 ResultSet別の行がある場合はTRUE返し、最後の行を過ぎて移動した場合はFALSE返します。
ポインタを最初の行に移動した後、サンプルアプリケーションは getString () getterメソッドを使用して最初の列の値を取得し、その値を出力します。 ListEmployeesはループ内でrs.next()とrs.getString()を呼び出すので、結果セット内の各行を処理します。 ListEmployeesは、 rsなるとループを終了します。 next ()は最後の行を越えてポインタを移動し、 FALSEを返しFALSE 。
{
}
ResultSetインタフェースを使用するときは、
•
値を読み込む前にnext() 呼び出す必要があります。 next()は、別の行が利用可能である場合にtrueを返し、その行を処理する準備をします。
•
JDBC仕様では、アプリケーションは ResultSet 各行に一度だけアクセスする必要があります 。現時点ではAdvanced Server JDBCドライバを使用すると、必要に応じて何度でもフィールドにアクセスできるようになりますが、この規則に従うのが最も安全です。
•
ResultSet 使用が終了したら 、 close()メソッドを呼び出してそのオブジェクトが保持しているリソースを解放します。
すべてのJDBCオブジェクトはいくつかのリソースを消費します。 ResultSetオブジェクトは、例えば、クエリによって返されるすべての行のコピーを含んでいてもよいです。 Statementオブジェクトには、最後に実行したコマンドのテキストなどを含めることができます。通常、アプリケーションがリソースを必要としなくなったときに、それらのリソースを解放することをお勧めします。サンプルアプリケーションは、各オブジェクトのclose()メソッドを呼び出すことによって、 Result 、 Statement 、およびConnectionオブジェクトによって消費されたリソースを解放します。
JDBCオブジェクトがエラー( SQLException 型またはSQLExceptionから派生した型のオブジェクト)をスローすると、 SQLExceptionオブジェクトは3つの異なるエラー情報を公開します。
前の例では、 ListEmployeesはStatementを使用してSELECT文を実行しました。 executeQuery()メソッドexecuteQuery()は、クエリステートメントを実行するように設計されているため、クエリによって返されたデータを含むResultSetが返されます。 Statementクラスは、他の種類のコマンド( UPDATE 、 INSERT 、 DELETEなど)を実行するために使用する必要がある2番目のメソッドを提供します。行のコレクションを返すのではなく、 executeUpdate()メソッドは、実行するSQLコマンドの影響を受ける行数を返します。
executeUpdate()メソッドのシグネチャは次のとおりです。
このメソッドに、実行するSQLコマンドを含むString 型の単一パラメータを指定します。
リスト1.3は、 executeUpdate()メソッドを使用してempテーブルに行を追加する方法を示しています。
注:次の例は完全なアプリケーションではなく、メソッドにすぎません。このドキュメントの残りの部分にあるサンプルには、 Connection設定と切断に必要なコードは含まれていません。例を試すには、サンプルコードを呼び出すクラスを用意する必要があります。
{
}
updateEmployee()メソッドは、呼び出し元から単一の引数、Advanced Serverのデータベースに接続する必要があり、Connectionオブジェクトを期待します:
次に、 updateEmployee()はユーザーに従業員の名前と番号の入力を求めます。
updateEmployee()はconsole.readline()によって返された値をINSERTステートメントに連結し、その結果をexecuteUpdate()メソッドに渡します。
たとえば、ユーザーが従業員番号 6000と名前Jones 入力した場合、 executeUpdate ()に渡されるINSERTステートメントは次のようになります。
executeUpdate()メソッドは、SQL文によって影響を受けた行の数を返す( INSERT典型的には、1つの行に影響を与えるが、 UPDATEまたはDELETEステートメントがより影響を与えることができます)。 executeUpdate()がエラーをスローせずに戻った場合は、 Systemへの呼び出し。 out 。 printlnは、影響を受けた行数を示すメッセージをユーザーに表示します。
{
}
executeUpdate()は、結果セットを返さない任意のSQLコマンドと共に使用できます 。 SQLコマンドでexecuteUpdate()を使用した簡単な構文例を次に示します。
UPDATEコマンドをexecuteUpdate()とともに使用して行を更新するには、次のようにします。
テーブルから行を削除するためにexecuteUpdate() DELETEコマンドを使用するには、次のようにします。
データベースからテーブルを削除するためにexecuteUpdate()でDROP TABLEコマンドを使用するには、次のexecuteUpdate()をexecuteUpdate()します。
新しいテーブルをデータベースに追加するためにexecuteUpdate()でCREATE TABLEコマンドを使用するには、次のexecuteUpdate()をexecuteUpdate()します。
stmt.executeUpdate("CREATE TABLE tablename ( fieldname NUMBER(4,2),
fieldname2 VARCHAR2(30))");
ALTER TABLEコマンドとexecuteUpdate() を使用してテーブルの属性を変更するには、次のexecuteUpdate()をexecuteUpdate()します。
stmt.executeUpdate("ALTER TABLE tablename ADD COLUMN colname BOOLEAN");
次の例(リスト1.4)は、少し手間をかけてプログラムにグラフィカルユーザーインタフェースを追加することができます。次の例(リスト1.4)は、 JTable (スプレッドシートのようなグラフィカルオブジェクト)を作成して、そのJTable問い合わせJTable 。
注:次のサンプルアプリケーションは方法であり、完全なアプリケーションではありません。このメソッドを呼び出すには、適切なmain()関数とラッパークラスを提供します。
...
{
}
showEmployees()メソッドを作成する前に、いくつかのJDK提供クラスの定義をインポートする必要があります。
showEmployees()メソッドは期待Connectionオブジェクトは、呼び出し元によって提供されます。 ConnectionオブジェクトはAdvanced Serverに接続されている必要があります。
showEmployees()はStatementを作成し、 executeQuery()メソッドを使用して従業員リストを生成するSQLクエリを実行します。
ご executeQuery() とおり、 executeQuery()はResultSetオブジェクトを返します。 ResultSetオブジェクトには、結果セットの形状 (つまり、結果セット内の行数と列数、各列のデータ型、各列の名前など)を記述するメタデータが含まれています。 getMetaData()メソッドを呼び出して、 ResultSetからメタデータを抽出できます。
次に、 showEmployees()は列ヘッダーを保持するためのVector (1次元配列)を作成してから、 ResultMetaDataオブジェクトの各ヘッダーをベクトルにResultMetaDataます。
{
}
列ヘッダーを配置した状態で、 showEmployees()はResultSetから各行を抽出し、それを新しいrows ( rowsという名前)にコピーします。 rowsベクトルは実際にはベクトルのベクトルです。rowsベクトルの各エントリには、そのrowsのデータ値を含むベクトルが含まれています。この組み合わせは、 JTableを構築するために必要となる二次元配列を形成しJTable 。 rowsベクトルを作成した後、プログラムは( rs.next()呼び出して) ResultSet内の各行を読み取ります。各行の各列に対して、 ゲッターメソッドは、その行/列の値を抽出し、値を追加rowValuesベクター。最後に、 showEmployee()は各rowValuesベクトルをrowValuesベクトルに追加しrows 。
{
}
この時点で、ベクトル( labels )は列ヘッダーを含み、2番目の2次元ベクトル( rows )はテーブルのデータを含みます。これで、ベクトルとJTableを保持するJFrameからJTableを作成できます。
showEmployees()メソッドは、 catchユーザに適切なメッセージを発生し、表示することができる任意のエラーをインターセプトするブロック。
{
showEmployees()メソッドを呼び出した結果を図6.1に示します。
図6.1 - showEmployeesウィンドウ
前の例では、結果セットを JTable 表示するグラフィカルユーザーインタフェースを作成しました 。それでは、ギアを切り替えて、Advanced Server JDBC Connectorのより高度な機能のいくつかを紹介します。
Advanced Server JDBCドライバは、SQLクエリの結果を ResultSetオブジェクトとして取得します。クエリが多数の行を返す場合、バッチResultSetを使用すると以下のようになります。
ResultSetオブジェクトのフェッチサイズを小さくすると、ドライバはネットワーク全体(サーバーからクライアントへ)でResultSet全体をコピーしません。代わりに、ドライバは一度に少数の行を要求します。クライアントアプリケーションが結果セット内を移動すると、ドライバはサーバーから次の行のバッチをフェッチします。
•
Statementオブジェクトを使用して作成しなければならないResultSetのタイプTYPE_FORWARD_ONLY (デフォルト)タイプ。 TYPE_FORWARD_ONLY結果セットは、 ResultSet介して進むことができるだけです。
ResultSetオブジェクトのバッチサイズを制限すると、データの取得が高速化され、クライアントサイドアプリケーションに必要なリソースが削減されます。リスト1.5は、5行に制限されたバッチサイズでStatementオブジェクトを作成します。
呼び出し conn 。 setAutoCommit(false)すると、最初の行を取得する機会がある前に、サーバーはResultSet閉じません。 Connection準備したら、 Statementオブジェクトを構築できます。
ResultSetオブジェクト内の行ごとに、 println()呼び出しでa row was returned出力されましa row was returned 。
ResultSetにはテーブル内のすべての行が含まれていますが、それらはサーバーから一度に5行だけフェッチされることを忘れないでください 。クライアントの観点から見ると、 バッチ結果セットと未バッチ結果セットの唯一の違いは、 バッチ結果が短時間で最初の行を返すということです。
次に、特定のJDBCアプリケーションのパフォーマンスを向上させるために使用できる別の機能( PreparedStatement )を見ていきます。
多くのアプリケーションは同じSQLステートメントを何度も繰り返し実行し、各繰り返しの間にステートメント内の1つ以上のデータ値を変更します。 Statementオブジェクトを使用してSQL文を繰り返し実行する場合、サーバは毎回文を解析、計画、および最適化する必要があります。 JDBCは、そのようなシナリオで必要な作業量を減らすために、 Statementの派生物であるPreparedStatementを提供しています。
リスト1.6は、従業員IDと従業員名を受け入れ、その従業員情報をemp表に挿入する PreparedStatementを呼び出す方法を示しています。
{
}
SQLステートメントでデータ値をハードコーディングする代わりに、反復ごとに変わる値を表すプレースホルダーを挿入します。リスト1.6は、2つのプレースホルダー(それぞれ疑問符で表されています)を含むINSERTステートメントを示しています。
パラメータ化されたSQL文を使用すると、 AddEmployee()メソッドはConnectionオブジェクトにその文を準備してPreparedStatementオブジェクトを返すように依頼できます。
この時点で、 PreparedStatementはINSERTステートメントを解析し計画していますが、テーブルに追加する値がわかりません。実行する前にPreparedStatement 、あなたはセッターメトdを呼び出すことにより、各プレースホルダの値を指定する必要があります。 setObject()は2つの引数をsetObject()ます。
AddEmployee()メソッドは、従業員IDと名前をユーザに促し、呼び出しsetObject()ユーザによって供給された値を使用して:
そして、 PreparedStatementオブジェクトに文の実行を依頼します。
SQLステートメントが予想どおりに実行されると、 AddEmployee()は実行を確認するメッセージを表示します。サーバーで例外が発生した場合、エラー処理コードはエラーメッセージを表示します。
CallableStatementクラスは、ストアドプロシージャを呼び出すためのJavaプログラムのための方法を提供します。 CallableStatementオブジェクトは、入力( INパラメーター)、出力( OUTパラメーター)、またはその両方( IN OUTパラメーター)に使用される可変数のパラメーターを持つことができます。
各疑問符は、パラメータのプレースホルダとして機能します。ストアドプロシージャは、プレースホルダが IN 、 OUT 、またはIN OUTパラメータを表し 、Javaコードが一致する必要があるかどうかを決定します。 IN (またはIN OUT )パラメータに値を指定する方法と、 OUT (またはIN OUT )パラメータに返された値をすぐに取得する方法について説明します。
リスト1.7-aは、各従業員の給与を10%増やすストアドプロシージャを示しています。 increaseSalary 、発信者からの引数を期待していないし、任意の情報を返しません。
IS
{
}
Javaアプリケーションからストアドプロシージャを呼び出すには、 CallableStatementオブジェクトを使用します。 CallableStatementクラスは同様に、Statementクラスから派生しているStatementクラス、あなたが取得するCallableStatement尋ねることによってオブジェクトをConnectionあなたのための1つを作成するためにオブジェクトを。 ConnectionからCallableStatementを作成するには、 prepareCall()メソッドを使用します。
名前が示すとおり、 prepareCall()メソッドは文を準備しますが、実行しません。次の例でわかるように、アプリケーションは通常prepareCall()の呼び出しとexecute()呼び出しの間にパラメーター値をバインドします。サーバー上でストアドプロシージャを呼び出すには、 execute()メソッドを呼び出します。
このストアドプロシージャ( increaseSalary )はINパラメータを必要とせず、( OUTパラメータを使用して)呼び出し元に情報を返さなかったので、プロシージャを呼び出すことは単にCallableStatementオブジェクトを作成してからそのオブジェクトのexecute()メソッドを呼び出すことです。
次の例のコードは、最初に empInsert というストアドプロシージャを作成して呼び出します 。 empInsertは、従業員情報を含むINパラメータ( empno 、 ename 、 job 、 sal 、 comm 、 deptno 、およびmgrです。 empInsert 、 empInsertはその情報をempテーブルに挿入します。
AS
{
}
(各プレースホルダ ? )コマンドで( commandText )後のデータに置き換えられるコマンドのポイントを表します。
setObject()メソッドは、値を結合しINまたはIN OUTプレースホルダ。 setObject()呼び出すたびに、パラメータ番号とそのパラメータにバインドする値が指定されます。
次の例では、 deptSelect というSPLストアドプロシージャを作成して呼び出します 。このプロシージャでは、1つのINパラメータ(部門番号)が必要で、部門番号に対応する2つのOUTパラメータ(部門名と場所)が返されます。リスト1.9-aのコードはdeptSelectプロシージャを作成します。
(
)
AS
{
}
(各プレースホルダ ? )コマンドで( commandText )後のデータに置き換えられるコマンドのポイントを表します。
setObject()メソッドは、値を結合しINまたはIN OUTプレースホルダ。 setObject()を呼び出すときは、プレースホルダを(その序数で)識別し、そのプレースホルダの代わりに置き換える値を指定する必要があります。
CallableStatementオブジェクトを実行する前に、 各 OUTパラメータのJDBCタイプを登録する必要があります。 JDBCタイプのregisterOutParameter()はregisterOutParameter()メソッドで行われます。
文を実行した後、 CallableStatementのgetterメソッドはOUTパラメータ値を取得しますVARCHAR値を取得するには、 getString() getterメソッドを使用します。
この例では、 GetDeptInfo() 2つのOUTパラメータを登録し、(ストアドプロシージャの実行後に) OUTパラメータに返された値を取得します。両方のOUTパラメータはVARCHAR値として定義されているため、 GetDeptInfo()はgetString()メソッドを使用してOUTパラメータを取得します。
次の例のコードは、 1つのINパラメータ( p_deptno )、2つのIN OUTパラメータ( p_empnoとp_ename )、および3つのOUTパラメータ( p_job 、 p_hiredate 、 p_sal )で定義された empQuery という名前のストアドプロシージャを作成して呼び出します 。 empQuery 、 empQueryは2つのIN OUTパラメータと3つのOUTパラメータで従業員に関する情報を返します。
(
)
IS
1.10-Bをリスト呼び出す実証 empQuery 、手続きをするために値を提供するINパラメーター、および取り扱いOUTとIN OUTパラメータを:
{
}
(各プレースホルダ ? )コマンドで( commandText )後のデータに置き換えられるコマンドのポイントを表します。
setInt()メソッドは、結合型特異セッターメソッドであるIntegerに値をIN又はIN OUTプレースホルダ。 setInt()呼び出すと、パラメータ番号が指定され、そのプレースホルダの代わりに代入する値が提供されます。
setString()メソッドは、結合Stringに値IN又はIN OUTプレースホルダ。
CallableStatement 実行する前に 、 registerOutParameter()メソッドを呼び出して、各OUTパラメータのJDBCタイプを登録する必要があります。
INパラメータを使用してプロシージャを呼び出す前に 、設定メソッドを使用してそのパラメータに値を割り当てる必要があります。 OUTパラメータを使用してプロシージャを呼び出す前に、そのパラメータの型を登録します。その後、getterメソッドを呼び出して返された値を取得できます。 IN OUTパラメータを定義するプロシージャを呼び出すときは、3つすべてのアクションを実行する必要があります。
A REF CURSORは、 OPEN文によって返されたクエリ結果セットへのポインタを含むカーソル変数です。静的カーソルとは異なり、 REF CURSORは特定の問合せに結び付けられていません。同じREF CURSOR変数を何回でも開くことがCURSORます。 異なるクエリを含むOPEN文。毎回、そのクエリに対して新しい結果セットが作成され、カーソル変数を介して利用可能になります。 REF CURSORは、あるプロシージャから別のプロシージャに結果セットを渡すこともCURSOR 。
Advanced Serverは、 強い 型指定と弱い 型指定 の両方の REF の宣言をサポートしています。 CURSORs 。強く型付けされたカーソルは、予期される結果セットの形状 (各列の型)を宣言しなければなりません。厳密に型指定されたカーソルは、宣言された列を返すクエリでしか使用できません。異なる形状の結果セットを返すクエリでカーソルを開くと、サーバーは例外をスローします。一方、型の弱いカーソルは、任意の形状の結果セットを扱うことができます。
TYPE < cursor_type_name > IS REF CURSOR RETURN < return_type >;
リスト1.11-aに示すストアドプロシージャ( getEmpNames )は、サーバー上に2つのREF CURSORsを作成します。最初のREF CURSORにはemp表に委託された従業員のリストが含まれ、2番目のREF CURSORにはemp表に給与がempれた従業員のリストが含まれています。
(
)
IS
RefCursorSample()メソッドを呼び出す(1.11-Bリスト参照) getEmpName()ストアド・プロシージャと名前は、2つのそれぞれに返さ表示REF CURSOR変数:
{
}
CallableStatement各準備REF CURSOR ( commissionedおよびsalaried )各カーソルは、ストアドプロシージャのIN OUTパラメータgetEmpNames():として返されますgetEmpNames():
registerOutParameter() 呼び出すと 、最初のREF CURSOR ( commissioned )のパラメータタイプ( Types.REF )が登録されます。
別の呼び出し registerOutParameter()第二引数の型(登録Types 。 REF秒の) REF CURSOR ( salaried ):
stmt.execute()を呼び出すと 、次の文が実行されます。
getObject()メソッドは、最初のパラメータから値を取得しに結果をキャストResultSet 。次に、 RefCursorSampleはカーソルを繰り返し処理して、各委託従業員の名前を出力します。
{
}
同じgetterメソッドが2番目のパラメータからResultSetを取得し、 RefCursorExampleそのカーソルを反復処理して、各給与の従業員の名前を表示します。
{
}
BYTEAデータ・タイプはバイトのシーケンス内のバイナリ文字列を格納します。デジタル画像やサウンドファイルは、バイナリデータとして保存されることがよくあります。 Advanced Serverは、 BYTEAデータ型を介してバイナリデータを格納および取得できます。
次のJavaサンプルは、 BYTEAデータをAdvanced Serverデータベースに格納してから、そのデータを取得する方法を示しています。この例では少しセットアップが必要です。リスト1.12-a、1.12-b、および1.12-cは、Javaの例のサーバーサイド環境を作成します。
リスト1.12-aは BYTEAデータを格納するテーブル( emp_detail )を作成します 。 emp_detail 最初の列は従業員のID番号( INT型)を格納し、テーブルの主キーとして機能します。 2列目には、従業員の写真がBYTEA形式でBYTEAます。
(
);
リスト1.12-bは emp_detailテーブルに行を挿入するプロシージャ( ADD_PIC )を作成します。
そして最後に、リスト1.12-cは特定の従業員の写真を返す関数( GET_PIC )を作成します。
リスト1.13は ADD_PICプロシージャ(リスト1.12-b参照)を呼び出して写真をクライアントファイルシステムからサーバー上のemp_detailテーブルにコピーするJavaメソッドを示しています。
{
}
InsertPic()は、従業員番号と画像ファイルの名前の入力をユーザーに求めます。
要求されたファイルが存在しない場合、 InsertPic()はエラーメッセージを表示して終了します。
{
次に、 InsertPic()はADD_PICプロシージャを呼び出すCallableStatementオブジェクト( stmt )をADD_PICます。最初のプレースホルダ( ? )は、 ADD_PIC ( p_empno )によって予期される最初のパラメータを表します。 2番目のプレースホルダーは2番目のパラメーターを表します( p_photo )。これらのプレースホルダーに実際の値を提供するために、 InsertPic()は2つの設定メソッドを呼び出します。最初のパラメータは型であるためINTEGER 、 InsertPic()呼び出しsetInt()のための値を提供する方法p_empno 。 2番目のパラメータはBYTEA型であるため、 InsertPic()はバイナリセッターメソッドを使用します。この場合、メソッドはsetBinaryStream():
すべてうまく InsertPic() ば、 InsertPic()は画像がテーブルに追加されたことを確認するメッセージを表示します。エラーが発生した場合、 catchブロックはユーザーにメッセージを表示します。
{
JavaアプリケーションからBYTEAデータを挿入する方法がわかったので 、リスト1.14はサーバーからBYTEAデータを取得する方法を示しています。
{
}
GetPic()は、ユーザーに従業員ID番号の入力を求めることから始めます。
次に、 GetPic()は、1つのINパラメータと1つのOUTパラメータを使用してCallableStatementを準備します。最初のパラメータはデータベースから取得した写真を含むOUTパラメータです。写真はBYTEAデータなので、 GetPic()はパラメータをType.BINARYとして登録します。 2番目のパラメータは従業員番号( INT )を保持するINパラメータです。したがって、 GetPic()はsetInt()メソッドを使用して2番目のパラメータの値を提供します。
次に、 GetPic()はgetBytes getterメソッドを使用してCallableStatementからBYTEAデータを取得します。
FileOutputStreamオブジェクトは、宛先ファイル名に写真が含まれているバイナリデータを書き込みます。
最後に、 GetPic()はファイルが新しい場所に保存されたことを確認するメッセージを表示します。
SQLの CREATE TYPEコマンドを使用して、Advanced Serverデータベースに格納されているユーザー定義のオブジェクト型を作成します。 CREATE TYPEコマンドは、一般に配列とも呼ばれるコレクションを作成するためにも使用され、これもAdvanced Serverデータベースに格納されます。
基本オブジェクト・タイプは、 CREATE TYPE AS OBJECTコマンドと、オプションのCREATE TYPE BODYコマンドの使用法で作成されます 。
ネストした表型のコレクションを使用して作成されCREATE TYPE AS TABLE OFコマンドを使用します。 CREATE TYPE VARRAYコマンドを使用してVARRAY型コレクションを作成します。
}
(
);
オブジェクト型 emp_obj_typは、従業員の属性を定義します。前述のように、これらの属性の1つはオブジェクト型ADDR_OBJECT_TYPEです。オブジェクト型本体には、従業員情報を表示するメソッドが含まれています。
(
);
}
CallableStatementオブジェクトは、に基づいて作成されdisplay_emp()のメソッドemp_obj_typオブジェクトタイプ:
createStruct() 、それぞれaddressおよびempという名前のオブジェクト型addr_object_typeおよびemp_obj_typインスタンスを初期化して作成します。
呼び出し registerOutParameter()パラメータの型(登録Types.STRUCTの) emp_obj_typ :
setObject()メソッドは、オブジェクトのインスタンスのバインドempにIN OUTプレースホルダを。
呼び出し stmt.execute()への呼び出しを実行display_emp()メソッド:
getObject()はemp_obj_typオブジェクト型を取得します。 empオブジェクトとaddressオブジェクトのインスタンスの属性が取得されて表示されます。
Advanced Serverデータベースにコレクション型 NUMBER_ARRAYとCHAR_ARRAY 作成します。
1.17-Aのリストコレクション型使用SPL関数である NUMBER_ARRAYとCHAR_ARRAY通りINパラメータとCHAR_ARRAYなどOUTパラメータ。
関数から従業員IDを連結 NUMBER_ARRAY INから対応する行の従業員の名前のパラメータCHAR_ARRAY INパラメータ。結果として得られる連結エントリは、 CHAR_ARRAY OUTパラメータに返されます。
(
AS
}
CallableStatementオブジェクトを起動するために用意されconcatEmpIdName()関数:
createArrayOf() 、 empIdArrayおよびempNameArrayという名前のコレクションを初期化して作成します。
registerOutParameter() 呼び出すと 、 OUTパラメータのパラメータタイプ( Types.ARRAY )が登録されます。
setObject()メソッドは、コレクションに結合empIdArrayとempNameArrayへINプレースホルダを:
呼び出し stmt.execute()呼び出しconcatEmpIdName()関数:
getArray()は、関数によって返されたコレクションを取得します。連結された従業員IDと名前からなる最初の2行が表示されます。
Advanced Server JDBC Connectorは非同期通知処理機能を提供します。 通知は、SPL(またはPL / pgSQLの)プログラムを実行するサーバによって生成されたメッセージであるRAISE NOTICEステートメント。各通知はサーバーからクライアントアプリケーションに送信されます。 JDBCクライアントで通知を傍受するには、 アプリケーションはNoticeListenerオブジェクト(またはより一般的にはNoticeListenerから派生したオブジェクト)を作成する必要があります。
SPL(またはPL / pgSQL)プログラムの実行の結果として通知がクライアントに送信されることを理解することは重要です。通知を生成するには、ストアドプロシージャ、関数、またはトリガを呼び出すSQLステートメントを実行する必要があります。SQLステートメントの実行時に通知がクライアントに配信されます。通知はあらゆる種類のステートメントオブジェクトで機能します。 CallableStatementオブジェクト、 PreparedStatementオブジェクト、または単純なStatementオブジェクト。 JDBCプログラムは、 NoticeListenerをStatementオブジェクトに関連付けることによって通知をNoticeListenerします。場合Statementオブジェクトが通知を発生させたSQL文を実行し、JDBCを呼び出すnoticeReceived()関連で方法NoticeListener 。
リスト1.18-aは、 empテーブルをループ処理して各従業員に10%の昇給を行うSPLプロシージャを示しています 。各従業員が処理されると、 adjustSalaryはRAISE NOTICEステートメントを実行します(この場合、通知に含まれるメッセージはクライアントアプリケーションに進行状況を報告します)。リスト1.18-bは、各通知を傍受するNoticeListenerを作成する方法を示しています。
IS
}
{
}
NoticeExample()メソッドは簡単です。呼び出し元からの単一の引数、 Connectionオブジェクトが必要です。
NoticeExample()は、例1.10-aに示すadjustSalary手続きの呼び出しを準備することから始めます。ごcon.prepareCall() 、 con.prepareCall()はCallableStatementオブジェクトを返します。 CallableStatement実行する前に、 NoticeListenerインタフェースを実装するオブジェクトを作成し、そのオブジェクトをCallableStatement関連付けられているNoticeListenersのリストに追加する必要があります。
一旦 NoticeListenerが所定の位置にある、NoticeExample方法は、(サーバー上adjustSalaryプロシージャを呼び出す) のCallableStatementを実行し、ユーザにメッセージを表示します。
たび adjustSalary手順を実行RAISE NOTICE文は、サーバは(メッセージのテキストを送信し"Salary increased for ..."に) Statementクライアントアプリケーションで(または誘導体)のオブジェクトを。 JDBCは、呼び出しnoticeReceived()の呼び出し前に、方法(おそらく何回も) stmt.execute()完了します。
{
JDBCが noticeReceived()メソッドを呼び出すと 、サーバー上のRAISE NOTICEステートメントによって生成されたメッセージのテキストを含むSQLWarningオブジェクトが作成されます。
各 StatementオブジェクトはNoticeListeners リストを保持していることに注意して NoticeListeners 。 JDBCドライバは、サーバから通知を受け取ると、 Statementオブジェクトによって管理されているリストを調べます。リストが空の場合は、通知が内に保存されたStatementオブジェクト(あなたが呼び出すことで通知を取得することができますstmt.getWarnings()への呼び出し一回execute()完了します)。リストが空でない場合、JDBCドライバは、リスナがStatement追加された順に、各リスナにSQLWarningを配信します。
Advanced Server JDBC Connectorは、アプリケーションでJDBC Connectorを使用した場合の問題解決に役立つロギングの使用をサポートしています。 JDBC Connectorは、 JDK 1.4以降はJavaの一部であったjava.util.logging のロギングAPIを使用します 。 java.util.loggingについては、次のWebサイトで入手可能なThe PostgreSQL JDBC Driverを参照してください。
注意:以前のバージョンのAdvanced Server JDBCコネクタでは、ロギングを有効にするためのカスタムメカニズムが使用されていましたが、コミュニティバージョン42.1.4.1以降のバージョンではjava.util.loggingを使用するようになりました。古いメカニズムはもう利用できません。
ドライバのロガーレベル。許容値は OFF 、 DEBUG 、またはTRACEです。
このオプションは、ドライバのjava.util.logging.LoggerレベルをAdvanced Server JDBCレベルに有効にします。
OFF
OFF
ロガーのファイル名出力。デフォルトは java.util.logging.ConsoleHandlerです。
次の例では、ロギングレベルを TRACE ( FINEST )に、ログファイルをEDB-JDBC.LOGます。
次の表は、Advanced ServerとJDBCコネクタでサポートされているJDBCデータ型の一覧です。 setObject()メソッドを使用してAdvanced Serverの型(中央の列に表示)にバインドしている場合は、左の列に表示されている型のJDBC値を指定します。データを取得すると、 getObject()メソッドは右端の列にリストされているオブジェクトタイプを返します。
XML
注: Types.REF_CURSORはJRE 4.2でのみサポートされています。
注: Types.OTHERはUUIDに使用されるだけでなく、特定のタイプを指定せず、サーバーまたはJDBCドライバーがそのタイプを判別できるようにする場合にも使用されます。パラメータがjava.util.UUIDインスタンスである場合、JDBCドライバは適切な内部型を判断してそれをサーバに送信します。