Jdbc-quick-guide

提供:Dev Guides
移動先:案内検索

JDBC-クイックガイド

JDBCとは

JDBCは* J ava D ata b ase C * onnectivityの略で、Javaプログラミング言語と広範囲のデータベース間のデータベースに依存しない接続のための標準Java APIです。 。

JDBCライブラリには、データベースの使用に一般的に関連付けられている各タスクのAPIが含まれています。

  • データベースに接続する
  • SQLまたはMySQLステートメントの作成
  • データベースでそのSQLまたはMySQLクエリを実行する
  • 結果のレコードの表示と変更

前提条件:

JDBCを学習するには、次の2つの主題について十分に理解する必要があります。

  • リンク:/java/index [コアJAVAプログラミング]
  • リンク:/mysql/index [SQLまたはMySQLデータベース]

JDBC-環境設定:

次のセットアップが完了していることを確認してください。

  • コアJAVAインストール
  • SQLまたはMySQLデータベースのインストール

上記とは別に、プロジェクトに使用するデータベースをセットアップする必要があります。 これがEMPであり、同じデータベース内のテーブルEmployeesに作成したと仮定します。

JDBCアプリケーションの作成:

このチュートリアルでは、JDBCアプリケーションの構築に関連する6つのステップを簡単に説明します。

パッケージをインポートします。

これには、データベースプログラミングに必要なJDBCクラスを含むパッケージを含める必要があります。 ほとんどの場合、次のようにimport java.sql。*を使用するだけで十分です。

//STEP 1. Import required packages
import java.sql.*;

JDBCドライバーを登録します。

これには、データベースとの通信チャネルを開くことができるように、ドライバーを初期化する必要があります。 これを実現するためのコードスニペットを次に示します。

//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");

接続を開きます。

これには、DriverManager.getConnection()メソッドを使用してConnectionオブジェクトを作成する必要があります。Connectionオブジェクトは、次のようにデータベースとの物理接続を表します。

//STEP 3: Open a connection
// Database credentials
static final String USER = "username";
static final String PASS = "password";
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);

クエリを実行します。

これには、次のようにSQLステートメントを作成してデータベースに送信するために、StatementまたはPreparedStatementタイプのオブジェクトを使用する必要があります。

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

SQL UPDATE、INSERT、またはDELETEステートメントが必要な場合、次のコードスニペットが必要になります。

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);

結果セットからデータを抽出します。

このステップは、データベースからデータをフェッチする場合に必要です。 適切なResultSet.getXXX()メソッドを使用して、次のように結果セットからデータを取得できます。

//STEP 5: Extract data from result set
while(rs.next()){
   //Retrieve by column name
    int id  = rs.getInt("id");
    int age = rs.getInt("age");
    String first = rs.getString("first");
    String last = rs.getString("last");

   //Display values
    System.out.print("ID: " + id);
    System.out.print(", Age: " + age);
    System.out.print(", First: " + first);
    System.out.println(", Last: " + last);
}

環境をクリーンアップします。

次のようにJVMのガベージコレクションに依存するのではなく、すべてのデータベースリソースを明示的に閉じる必要があります。

//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();

最初のJDBCプログラム:

上記の手順に基づいて、JDBCコードを記述するときにテンプレートとして使用できる次の統合サンプルコードを作成できます。

このサンプルコードは、環境の章で行われた環境とデータベースのセットアップに基づいて記述されています。

//STEP 1. Import required packages
import java.sql.*;

public class FirstExample {
  //JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

  // Database credentials
   static final String USER = "username";
   static final String PASS = "password";

   public static void main(String[] args) {
   Connection conn = null;
   Statement stmt = null;
   try{
     //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

     //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

     //STEP 4: Execute a query
      System.out.println("Creating statement...");
      stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);

     //STEP 5: Extract data from result set
      while(rs.next()){
        //Retrieve by column name
         int id  = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");

        //Display values
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
     //STEP 6: Clean-up environment
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
     //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
     //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
     //finally block used to close resources
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      }//nothing we can do
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main
}//end FirstExample

次に、上記の例を次のようにコンパイルします。

C:\>javac FirstExample.java
C:\>
*FirstExample* を実行すると、次の結果が生成されます。
C:\>java FirstExample
Connecting to database...
Creating statement...
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

SQLExceptionメソッド:

SQLExceptionは、ドライバーとデータベースの両方で発生する可能性があります。 このような例外が発生すると、SQLException型のオブジェクトがcatch句に渡されます。

渡されたSQLExceptionオブジェクトには、例外に関する追加情報を取得するために使用できる次のメソッドがあります。

Method Description
getErrorCode( ) Gets the error number associated with the exception.
getMessage( ) Gets the JDBC driver’s error message for an error handled by the driver or gets the Oracle error number and message for a database error.
getSQLState( ) Gets the XOPEN SQLstate string. For a JDBC driver error, no useful information is returned from this method. For a database error, the five-digit XOPEN SQLstate code is returned. This method can return null.
getNextException( ) Gets the next Exception object in the exception chain.
printStackTrace( ) Prints the current exception, or throwable, and its backtrace to a standard error stream.
printStackTrace(PrintStream s) Prints this throwable and its backtrace to the print stream you specify.
printStackTrace(PrintWriter w) Prints this throwable and its backtrace to the print writer you specify.

Exceptionオブジェクトから入手可能な情報を利用することで、例外をキャッチしてプログラムを適切に続行できます。 tryブロックの一般的な形式は次のとおりです。

try {
  //Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
  //Your exception handling code goes between these
  //curly braces, similar to the exception clause
  //in a PL/SQL block.
}
finally {
  //Your must-always-be-executed code goes between these
  //curly braces. Like closing database connection.
}

JDBC-データ型:

次の表は、PreparedStatementまたはCallableStatementオブジェクトのsetXXX()メソッドまたはResultSet.updateXXX()メソッドを呼び出すときにJavaデータ型が変換されるデフォルトのJDBCデータ型をまとめたものです。

SQL JDBC/Java setXXX updateXXX
VARCHAR java.lang.String setString updateString
CHAR java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
BIT boolean setBoolean updateBoolean
NUMERIC java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT byte setByte updateByte
SMALLINT short setShort updateShort
INTEGER int setInt updateInt
BIGINT long setLong updateLong
REAL float setFloat updateFloat
FLOAT float setFloat updateFloat
DOUBLE double setDouble updateDouble
VARBINARY byte[ ] setBytes updateBytes
BINARY byte[ ] setBytes updateBytes
DATE java.sql.Date setDate updateDate
TIME java.sql.Time setTime updateTime
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
BLOB java.sql.Blob setBlob updateBlob
ARRAY java.sql.Array setARRAY updateARRAY
REF java.sql.Ref SetRef updateRef
STRUCT java.sql.Struct SetStruct updateStruct

JDBC 3.0では、BLOB、CLOB、ARRAY、およびREFデータ型のサポートが強化されています。 ResultSetオブジェクトには、サーバー上の各データを直接操作できるupdateBLOB()、updateCLOB()、updateArray()、およびupdateRef()メソッドが追加されました。

setXXX()およびupdateXXX()メソッドを使用すると、特定のJava型を特定のJDBCデータ型に変換できます。 メソッドsetObject()およびupdateObject()を使用すると、ほとんどすべてのJava型をJDBCデータ型にマップできます。

ResultSetオブジェクトは、列の値を取得するために各データ型に対応するgetXXX()メソッドを提供します。 各メソッドは、列名またはその順序位置で使用できます。

SQL JDBC/Java setXXX getXXX
VARCHAR java.lang.String setString getString
CHAR java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
BIT boolean setBoolean getBoolean
NUMERIC java.math.BigDecimal setBigDecimal getBigDecimal
TINYINT byte setByte getByte
SMALLINT short setShort getShort
INTEGER int setInt getInt
BIGINT long setLong getLong
REAL float setFloat getFloat
FLOAT float setFloat getFloat
DOUBLE double setDouble getDouble
VARBINARY byte[ ] setBytes getBytes
BINARY byte[ ] setBytes getBytes
DATE java.sql.Date setDate getDate
TIME java.sql.Time setTime getTime
TIMESTAMP java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
BLOB java.sql.Blob setBlob getBlob
ARRAY java.sql.Array setARRAY getARRAY
REF java.sql.Ref SetRef getRef
STRUCT java.sql.Struct SetStruct getStruct

JDBC-バッチ処理:

バッチ処理を使用すると、関連するSQLステートメントをバッチにグループ化し、データベースへの1回の呼び出しでそれらを送信できます。

複数のSQLステートメントを一度にデータベースに送信すると、通信オーバーヘッドの量が減り、パフォーマンスが向上します。

  • この機能をサポートするためにJDBCドライバーは必要ありません。 _DatabaseMetaData.supportsBatchUpdates()_メソッドを使用して、ターゲットデータベースがバッチ更新処理をサポートしているかどうかを判断する必要があります。 JDBCドライバーがこの機能をサポートしている場合、メソッドはtrueを返します。
  • Statement、PreparedStatement、、および_CallableStatement_の* addBatch()*メソッドは、個々のステートメントをバッチに追加するために使用されます。 * executeBatch()*は、グループ化されたすべてのステートメントの実行を開始するために使用されます。
  • * executeBatch()*は整数の配列を返し、配列の各要素はそれぞれの更新ステートメントの更新カウントを表します。
  • 処理のためにステートメントをバッチに追加できるように、* clearBatch()*メソッドを使用してステートメントを削除できます。 このメソッドは、addBatch()メソッドで追加したすべてのステートメントを削除します。 ただし、削除するステートメントを選択的に選択することはできません。

JDBC-ストリーミングデータ:

PreparedStatementオブジェクトには、入力および出力ストリームを使用してパラメーターデータを提供する機能があります。 これにより、CLOBやBLOBデータ型などの大きな値を保持できるデータベース列にファイル全体を配置できます。

データのストリーミングに使用できる次のメソッドがあります。

  • * setAsciiStream():*このメソッドは、大きなASCII値を提供するために使用されます。
  • * setCharacterStream():*このメソッドは、大きなUNICODE値を提供するために使用されます。
  • * setBinaryStream():*このメソッドは、大きなバイナリ値を提供するために使用されます。

setXXXStream()メソッドには、パラメータープレースホルダーに加えて、追加のパラメーターであるファイルサイズが必要です。 このパラメーターは、ストリームを使用してデータベースに送信するデータの量をドライバーに通知します。

これらすべての概念の詳細については、完全なチュートリアルを完了する必要があります。