java jdbc connection tutorial with programming example
このJDBC接続チュートリアルでは、データベースへの基本的な手順を例とともに説明し、さまざまなデータベースのJDBC接続文字列を提供します。
使い慣れたオペレーティングシステムをリストしてください
の前のチュートリアルでは JDBCチュートリアルシリーズ 、Java Database Connectivity(JDBC)のコンポーネント、アーキテクチャ、およびドライバのタイプを学習しました。
このチュートリアルでは、JDBCを使用してデータベースに接続する手順について説明します。このチュートリアルでは、JDBC接続の実行方法とデータベース操作の実行方法を示します。 JDBC APIは、Javaプログラムとデータベース間のインターフェースとして機能します。
このチュートリアルの最後に、データベースに接続してDB操作を実行するJavaプログラムを作成できるようになります。
学習内容:
JDBC接続の手順
JDBCに接続するには、6つの基本的な手順があります。彼らは下の画像に参加しています:
#1)パッケージのインポート
まず、Javaプログラムで使用するために、既存のパッケージをインポートする必要があります。インポートにより、JDBCAPIクラスがプログラムで使用可能になります。その後、パッケージのクラスとサブクラスを使用できます。
JDBCドライバーに関係なく、Javaプログラムに次のインポートステートメントを追加します。
import java.sql.*;
プログラムで使用する機能に基づいて、他のクラスをインポートします。プログラムで使用するデータベースに適切なJarファイルをダウンロードします。
を参照してください 前のチュートリアル データベースのJarファイルをダウンロードするためのリンク。
JDBC API 4.0は、主に2つの重要なパッケージを提供します。
- java.sql
- javax.sql
(i)java.sqlパッケージ
このパッケージは、SQLクエリの作成や実行などのほとんどのJDBC機能を実行するためのクラスとインターフェイスを提供します。
クラス/インターフェース | 説明 |
---|---|
DriverManager | JDBCドライバーのセットを管理するための基本的なサービスを提供します |
BLOB | JavaプログラムのSQLBlob値を表します |
CallableStatement | SQLストアドプロシージャを実行するために使用されます |
CLOB | JavaプログラムのSQLClob値を表します |
接続 | 特定のデータベースとの接続(セッション)を作成します |
日付 | 日付SQLタイプのサポートを提供します |
運転者 | DriverManagerでドライバーのインスタンスを作成します |
ParameterMetaData | これは、PreparedStatementオブジェクトの各パラメーターのタイプとプロパティに関する情報を取得するために使用できるオブジェクトです。 |
PreparedStatement | これは、Javaプログラムでパラメーター化されたクエリを作成および実行するために使用されます |
ResultSet | 行ごとに結果にアクセスするために使用されます |
ResultSetMetaData | ResultSetオブジェクトの列のタイプとプロパティに関する情報を取得するために使用されます |
RowId | SQLROWID値を表します |
セーブポイント | トランザクションのセーブポイントを表します |
SQLData | これは、SQLユーザー定義型(UDT)をJavaプログラムのクラスにマップするために使用されます。 |
SQLXML | SQLXMLタイプを表します |
ステートメント | 静的SQLステートメントを実行するために使用されます |
DriverPropertyInfo | 接続を確立するためのドライバープロパティを提供します |
SQLException | データベースエラーに関する情報を提供します |
SQLTimeoutException | これは、ステートメントで指定されたタイムアウトが経過したときにスローされるSQLExceptionのサブクラスです。 |
SQLWarning | データベースアクセスの警告に関する情報を提供するのは例外です |
構造体 | これは、SQL構造化タイプのJavaプログラムの標準マッピングです。 |
(ii)javax.sqlパッケージ
これはJDBC拡張APIであり、Javaプログラムでサーバー側のデータアクセスと処理を提供します。
クラス/インターフェース | 説明 |
---|---|
ConnectionEvent | 接続関連のイベントの発生に関する情報を提供します |
CommonDataSource | これは、DataSource、XADataSource、およびConnectionPoolDataSourceの間で共通のメソッドを定義するインターフェースです。 |
ConnectionPoolDataSource | PooledConnectionオブジェクトのファクトリです |
情報源 | これは、オブジェクトが表す物理データソースへの接続用のファクトリです。 |
PooledConnection | 接続プールの管理に使用されます |
RowSet | JavaBeansコンポーネントモデルのJDBCAPIをサポートします |
RowSetMetadata | RowSetオブジェクトの列に関する情報があります |
ConnectionEventListener | PooledConnectionオブジェクトイベントを登録するために使用されます |
RowSetEvent | Rowsetオブジェクトにイベントが発生すると生成されます |
StatementEvent | 生成されたPooledConnectionに登録されたすべてのStatementEventListenersに送信されます |
#2)ロードドライバー
まず、データベースに接続する前に、プログラムにドライバーをロード/登録する必要があります。プログラムのデータベースごとに1回だけ登録する必要があります。
次の2つの方法でドライバーをロードできます。
- Class.forName()
- DriverManager.registerDriver()
(i)Class.forName()
このようにして、ドライバのクラスファイルは実行時にメモリにロードされます。暗黙的にドライバーをロードします。ロード中、ドライバーは自動的にJDBCに登録されます。
DB名 | JDBCドライバー名 |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
オラクル | oracle.jdbc.driver.OracleDriver |
Microsoft SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
MSAccess | net.ucanaccess.jdbc.UcanaccessDriver |
PostgreSQL | org.postgresql.Driver |
IBM DB2 | com.ibm.db2.jdbc.net.DB2Driver |
TeraData | com.teradata.jdbc.TeraDriver |
注意: forName()メソッドは、JDK準拠の仮想マシンでのみ有効です。
(ii)DriverManager.registerDriver()
DriverManagerは、java.sqlパッケージで使用できる組み込みクラスです。これは、接続するJavaアプリケーションとデータベース間の仲介役として機能します。データベースに接続する前に、ドライバーをDriverManagerに登録する必要があります。 DriverManagerの主な機能は、データベースのドライバークラスをロードし、DBとの接続を作成することです。
public static void registerDriver(driver) –このメソッドは、ドライバーをドライバーマネージャーに登録します。ドライバーがすでに登録されている場合、ドライバーは何もしません。
- 投げます SQLException データベースエラーが発生した場合。
- 投げます NullPointerException ドライバがnullの場合。
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
このように、データベースのドライバーをパラメーターとして渡すことで登録できます。
#3)接続を確立する
ドライバをロードした後、次のステップは接続を作成して確立することです。必要に応じて、パッケージをインポートし、ドライバーをロードして登録すると、データベース接続の確立に進むことができます。
DriverManagerクラスにはgetConnectionメソッドがあります。このメソッドを使用して、Databaseとの接続を取得します。 getConnection()メソッドを呼び出すには、3つのパラメーターを渡す必要があります。 3つのパラメーターは、データベースにアクセスするための文字列データ型URL、ユーザー名、およびパスワードです。
getConnection()メソッドはオーバーロードされたメソッドです。 2つの方法は次のとおりです。
- getConnection(URL、ユーザー名、パスワード); – URL、ユーザー名、パスワードの3つのパラメーターがあります。
- getConnection(URL); –パラメーターは1つだけです。 URLにはユーザー名とパスワードもあります。
次の表に、さまざまなデータベースのJDBC接続文字列を示します。
データベース | 接続文字列/ DBURL |
---|---|
Sybase | jdbc:Sybase:Tds:HOSTNAME:PORT / DATABASE_NAME |
MySQL | jdbc:mysql:// HOST_NAME:PORT / DATABASE_NAME |
オラクル | jdbc:oracle:thin:@HOST_NAME:PORT:SERVICE_NAME |
Microsoft SQL Server | jdbc:sqlserver:// HOST_NAME:PORT; DatabaseName = |
MSAccess | jdbc:ucanaccess:// DATABASE_PATH |
PostgreSQL | jdbc:postgresql:// HOST_NAME:PORT / DATABASE_NAME |
IBM DB2 | jdbc:db2:// HOSTNAME:PORT / DATABASE_NAME |
TeraData | jdbc:teradata:// HOSTNAME / database =、tmode = ANSI、charset = UTF8 |
例:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
この例では、
- 薄い ドライバタイプを指します。
- ローカルホスト Oracleデータベースが実行されている場所です。
- 1521 DBに接続するためのポート番号です。
- 車両 – SID
- システム –Oracleデータベースに接続するためのユーザー名。
- Pass123 @ –パスワード
#4)ステートメントの作成と実行
接続が確立されると、接続されたデータベースと対話できます。まず、SQLクエリを実行するステートメントを作成してから、ステートメントを実行する必要があります。
(i)ステートメントの作成
次に、接続されたデータベースでクエリを実行するステートメントオブジェクトを作成します。のcreateStatementメソッドを使用します 接続 クエリを作成するクラス。
java.sqlパッケージで使用できるステートメントインターフェイスは3つあります。これらについて以下に説明します。
a)ステートメント
このインターフェースは、パラメーターのない単純なSQLステートメントを実装するために使用されます。 ResultSetオブジェクトを返します。
Statement statemnt1 = conn.createStatement();
b)プリペアドステートメント
このPreparedStatementインターフェースは、Statementインターフェースを拡張します。そのため、Statementインターフェイスよりも多くの機能があります。これは、パラメーター化およびプリコンパイルされたSQLステートメントを実装するために使用されます。クエリを1回だけコンパイルするため、アプリケーションのパフォーマンスが向上します。
このインターフェースを新しいパラメーターで再利用するのは簡単です。 INパラメータをサポートします。このステートメントは、パラメーターなしで使用できます。
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c)CallableStatement
CallableStatementインターフェースは、PreparedStatementインターフェースを拡張します。そのため、PreparedStatementインターフェイスよりも多くの機能があります。これは、データベース内のプロシージャまたは関数を呼び出すパラメータ化されたSQLステートメントを実装するために使用されます。ストアドプロシージャは、クラス内のメソッドまたは関数のように機能します。 INおよびOUTパラメータをサポートします。
CallableStatementインスタンスは、ConnectionオブジェクトのprepareCallメソッドを呼び出すことによって作成されます。
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii)クエリを実行する
ステートメントインターフェイスでクエリを実行するには、4つの重要なメソッドがあります。これらについて以下に説明します。
- ResultSet executeQuery(String sql)
- int executeUpdate(String sql)
- ブールexecute(String sql)
- int () executeBatch()
a)ResultSet executeQuery(String sql)
ステートメントインターフェイスのexecuteQuery()メソッドは、SQLクエリを実行し、DBから値を取得するために使用されます。 ResultSetオブジェクトを返します。通常、SELECTクエリにはこのメソッドを使用します。
b)executeUpdate(String sql)
executeUpdate()メソッドは、INSERT、UPDATE、DELETE(DMLステートメント)、または何も返さないDDLステートメントなどの値指定のクエリを実行するために使用されます。ほとんどの場合、挿入と更新にはこのメソッドを使用します。
c)execute(String sql)
execute()メソッドは、SQLクエリを実行するために使用されます。戻ります true SELECTクエリを実行する場合。そして、それは戻ります false INSERTまたはUPDATEクエリを実行する場合。
d)executeBatch()
このメソッドは、データベースへのSQLクエリのバッチを実行するために使用され、すべてのクエリが正常に実行されると、更新カウントの配列を返します。このメソッドを使用して、レコードの大部分を挿入/更新します。
#5)結果を取得する
executeQuery()メソッドを使用してクエリを実行すると、結果はResultSetオブジェクトに格納されます。テーブルに一致するレコードがない場合でも、返されるResultSetオブジェクトがnullになることはありません。 ResultSetオブジェクトは、データベースから取得したデータにアクセスするために使用されます。
ResultSet rs 1= statemnt1.executeQuery(QUERY));
SELECTクエリにはexecuteQuery()メソッドを使用できます。誰かが挿入/更新クエリを実行しようとすると、「SQLExecptionがスローされます。 executeQueryメソッドは更新に使用できません 」。
ResultSetオブジェクトは、結果セットの現在の行を指します。 ResultSetオブジェクトのデータを反復処理するには、whileループでnext()メソッドを呼び出します。読み取るレコードがこれ以上ない場合は、FALSEを返します。
ResultSetを使用して、DB内のデータを更新することもできます。 getInt()、getString()、getDate()などのゲッターメソッドを使用して、ResultSetからデータを取得できます。 Getterメソッドを使用して値を取得するには、パラメーターとして列インデックスまたは列名を渡す必要があります。
次のチュートリアルで、ResultSetについて詳しく説明します。
#6)接続を閉じる
最後に、DB内のデータの操作が完了しました。これで、JDBC接続を閉じることができます。リソースを使用した後、リソースを閉じていることを確認する必要があります。それらを適切に閉じないと、接続が切断される可能性があります。
接続オブジェクトを閉じると、StatementオブジェクトとResultSetオブジェクトは自動的に閉じられます。
Android携帯でネットワークセキュリティキーを見つける方法
conn.close();
Java 7以降では、try-catchブロックを使用してJDBC接続を自動的に閉じることができます。 JDBC接続は、tryブロックの括弧内で開く必要があります。 tryブロック内では、通常どおりデータベース接続を実行できます。
実行がtryブロックを終了すると、接続が自動的に閉じられます。この場合、Javaプログラムでconn.closeメソッドを呼び出して接続を閉じる必要はありません。
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
JavaJDBC接続の例
この例では、JavaプログラムでJDBCを使用してデータベースに接続するための6つの基本的な手順を実装する方法を説明します。
テーブルを作成する
その前に、まず1つのテーブルを作成し、それにいくつかのエントリを追加します。
以下は、テーブルを作成するためのSQLクエリです。
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
OracleDBに「employee_details」テーブルを作成しました。
テーブルにデータを挿入する
次のクエリを使用して、データを「employee_details」テーブルに挿入します。
insert into employee_details values (1001, 'Luther', 'Martin', 'ml@gmail.com', 1, 13000); insert into employee_details values (1002, 'Murray', 'Keith', 'km@gmail.com', 2, 25000); insert into employee_details values (1003, 'Branson', 'John', 'jb@gmail.com', 3, 15000); insert into employee_details values (1004, 'Martin', 'Richard', 'rm@gmail.com', 4, 16000); insert into employee_details values (1005, 'Hickman', 'David', 'dh@gmail.com', 5, 17000);
Javaプログラム
JDBC jarファイルをダウンロードして、Javaプロジェクトにインポートします。
package com.STH.JDBC; // import sql package to use it in our program import java.sql.*; public class Sample_JDBC_Program { public static void main(String() args) throws ClassNotFoundException, SQLException { // store the SQL statement in a string String QUERY = 'select * from employee_details'; //register the oracle driver with DriverManager Class.forName('oracle.jdbc.driver.OracleDriver'); //Here we have used Java 8 so opening the connection in try statement try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Created statement and execute it ResultSet rs1 = statemnt1.executeQuery(QUERY); { //Get the values of the record using while loop while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); //store the values which are retrieved using ResultSet and print it System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); } } } catch (SQLException e) { //If exception occurs catch it and exit the program e.printStackTrace(); } } }
出力:
注意すべき重要なポイント:
- まず、JDBC接続用のJavaプログラムで使用するパッケージをインポートする必要があります。したがって、パッケージ内のクラス、サブクラス、およびインターフェースを使用できます。
- 接続を確立する前に、DriverManagerにドライバーを登録またはロードする必要があります。
- ドライバを登録すると、接続を確立して操作を行うことができます。
- ステートメントインターフェイスを使用して、SQLクエリを作成して実行できます。単純なSQLクエリの場合、Statementインターフェイスを使用できます。挿入/更新/削除には、PreparedStatementインターフェースを使用できます。
- ステートメントの実行後、結果はResultSetオブジェクトに格納されます。複数のレコードに対してnext()メソッドを使用して、ResultSetオブジェクトから結果を取得します。
- データベース操作が完了したら、接続を閉じる必要があります。他の人がリソースを使用できるようにするため。
よくある質問
Q#1)JavaでDBに接続するための基本的な手順は何ですか?
回答: JavaでDBに接続するための6つの基本的な手順があります。
彼らです:
- インポートパッケージ
- ロードドライバー
- 接続を確立する
- ステートメントを作成して実行します
- 結果を取得する
- 接続を閉じる
Q#2)JDBCのBLOBデータ型とCLOBデータ型の違いは何ですか?
回答:
BLOB バイナリタイプのデータを保持するために使用されます。ストレージサイズはデータベースによって異なる場合があります 例: 画像、音声、ビデオ。
CLOB データの文字タイプを保持するために使用されます。 CLOBと同様に、ストレージスペースはDBによって異なる場合があります。 例: ファイル。
Q#3)DBとの接続を確立するために使用されるDriverManagerクラスのメソッドはどれですか?
回答: DriverManagerクラスには、DBとの接続を確立するために使用されるgetConnection()メソッドがあります。
Q#4)Class.forName()とDriverManager.registerDriver()の違いは何ですか?
回答: Class.forName() - まず、ドライバをメモリにロードしてから、適切なドライバをドライバマネージャに登録します。次に、JDBC接続を実行するためのドライバーのオブジェクトを作成します。ドライバーを明示的にロードします。
DriverManager.registerDriver()– 暗黙的にドライバーを登録します。
Q#5)接続リークとは何ですか?
回答: この状況は、接続が開かれ、接続を閉じなかった場合に発生します。接続を開き、接続を閉じないコードのブロックがある場合。そのコードブロックが実行されるたびに、接続は接続プールからリークします。
使用可能なすべての接続がリークされると、接続は使用できなくなり、アプリケーションがハングします。接続を開くことがどれだけ重要であるか、接続を閉じることが重要です。
Q#6)接続を閉じることは必須ですか?
回答: 7より前のバージョンのJavaを使用している場合は、接続を手動で閉じる必要があります。
Java 7以降のバージョンからは、tryブロックの括弧内にあるJDBC接続コードを開くことで接続を自動的に閉じることができます。プログラムがtryブロックを終了すると、接続が自動的に閉じられます。
結論
このチュートリアルでは、JDBC接続を確立する方法について説明しました。これで、JavaプログラムでJDBCを使用してDB操作を実行できます。データベースに接続するための6つの基本的な手順を検討しました。使用するには、Javaプログラムにパッケージをインポートする必要があります。
ドライバを登録すると、接続を確立できます。 Statementインターフェイスを使用してSQLステートメントを作成および実行し、ResultSetオブジェクトで結果を取得できます。最後のステップとして、接続を閉じる必要があります。
推奨読書
- Java JDBCチュートリアル:JDBC(Java Database Connectivity)とは
- 例を含むJavaインターフェイスと抽象クラスのチュートリアル
- 例を使用したJavaJDBCトランザクション管理
- JDBC DriverManager、JDBCプリペアドステートメントおよびステートメント
- JDBC ResultSet:JavaResultSetを使用してデータを取得する方法
- 初心者向けのJAVAチュートリアル:100以上の実践的なJavaビデオチュートリアル
- Javaプログラミング言語入門-ビデオチュートリアル
- Seleniumデータベースのテスト(WebDriverとJDBC APIを使用)