JDBC(Javaデータベース接続、Java Database Connectivity)は、Javaクラスおよびインタフェースで書かれたセットで構成され、複数のリレーショナル・データベースへの統一されたアクセスを提供することができ、SQL文を実行するためのJava APIです。JDBCは、このように純粋なJava APIを使用してデータベース・アプリケーションを作成するためにデータベース開発者を作るために、より洗練されたツールやインタフェースを構築することができ、かつクロスプラットフォーム、データベース・ベンダーすることができ、標準のAPIを使用してデータベースの開発者に提供していません制限。
1、クロスプラットフォームの操作:これは、Java言語の「どこでも実行、一度コンパイル」機能の継承です。
データベースベンダーの制約から2:巧妙なJDBCプロバイダ・データベースに関係なく、その二つのインターフェース、役割ようなSQLデータベースコールと処理結果の両方のことであるアプリケーション層のための1つを提供し、他のドライバ層、相互作用、JDBCドライバの処理は、特定のドライバは、JDBC APIを使用してJavaプログラムとデータソース間のブリッジを作成することができます。アプリケーションは、ドライバーの様々な上で実行するように移動することができ、一度書き込まれることのみ必要です。Sunがドライバマネージャ、データベースサプライヤ提供-などのMySQL、Oracleなどを、ドライブ管理の要件を満たすために提供されたドライバを識別することができ、それが正常に動作することができます。だから、無制限JDBCデータベース・ベンダー。
JDBC APIはJavaアプリケーションとリレーショナルデータベースの様々な間のリンクとして使用することができ、また、同じ時間によってもたらされる利便性に負の影響を与え、次は、JDBC長所と短所があります。利点は次のとおりです。
- 便利な操作: JDBC開発者は、複雑なドライバ関数コールアップコマンドを使用する必要がないようにと。
- ポータビリティ: JDBCは、別のリレーショナルデータベースをサポートしていますが、複数のデータベース・アクセスをサポートするために、同じアプリケーションを作ることができますので、限り、あなたは適切なドライバをロードすることができますよう。
- 共通善: JDBCブリッジドライバODBCへのODBC JDBC機能。
- オブジェクト指向:使用して直接起動することができたときに、共通のJDBCデータベース接続は、クラスにカプセル化することができます。
次のような欠点があります:
- ある程度の影響を受けたデータレコードへの高速アクセス。
- データソースの変更難易度:JDBCデータソースを変更するには、異なっていなければならない様々なデータベース間で動作し、複数のデータベースをサポートするために、これは多くの問題をもたらしています
二、JDBCデータベース接続プロセスとその原則
1、開発環境で指定されたデータベース用のドライバをロードします。たとえば、次の実験、MySQLのJDBCドライバのサポートをダウンロードする必要があるので、MySQLデータベースを使用して(最新のものです:mysqlの-コネクタのjava-5.1.18 -bin.jar); および開発環境でのMyEclipseで、 (具体的には、ロードする方法を説明しますと)開発環境にロードされますするドライバをダウンロードしてください。
2、 Javaプログラムでドライバをロードします。(「COMにClass.forName:Javaプログラムでは、「Class.forNameの(」指定されたデータベース・ドライバ「)」によって、このようなのコードMySQLデータドライバをロードするように、ドライバ開発環境をロードするための実施形態に加え.mysql.jdbc.Driver「)
図3に示すように、データ接続オブジェクトを作成する:DriverManagerクラスを介してデータベース接続オブジェクト接続を作成します。ドライバがロードされているかどうかを確認するために使用するJavaとJDBCドライバ間のDriverManagerクラスの行為は、JDBC接続オブジェクトを作成し、データベースの接続、それはgetConnectionメソッドですが、URLに応じて、ユーザー名とパスワードを設定することができます。以下のような:接続の接続= DriverManager.geiConnection( "URLデータベース接続"、 "ユーザ名"、 "パスワード")。これは、URL =プロトコル名+ IPアドレス(ドメイン名)+ポート+データベース名、ユーザー名とパスワードは、データベースが使用されてログインするためのユーザー名とパスワードです。具体的には、MySQLデータベース接続コードを作成し、以下の通りであります:
接続connectMySQL = DriverManager.geiConnection(「JDBCます。mysql:// localhostを:3306 / myuserの」、 "根"、 "ルート");
4. Statementオブジェクトを作成します:Statementクラスは、主に静的SQL文を実行し、作成された結果を返すために使用されます。()メソッドのcreateStatement ConnectionオブジェクトによってStatementオブジェクトを作成します。たとえば、次のステートメントstatament = connection.createStatement();以下のようにステートメント特定の例では、オブジェクトコードを作成します。
ステートメントstatamentMySQL = connectMySQL.createStatement()。
図5に示すように、 SQL文に対応するStatementオブジェクトを呼び出す関連する方法は:()メソッドは、スタッフテーブルにコードデータを挿入するように、等挿入および欠失を含むexecuUpdate更新データによって使用されます。
statement.excuteUpdate(+」VALUES( 'TOM1'、321、 'M'、 '中国'、 '人事'、 "名前、年齢、性別、住所、出発、worklen、賃金)(スタッフ。INSERT INTO" '3'、 '3000')「);
オブジェクトののexecuteQuery()データのクエリを呼び出すことによってステートメント方法、およびクエリ結果がデータベースのデータ収集のクエリを実行した後返すResulSetオブジェクト、ResulSetになり、ResulSetを有するオブジェクトは、現在のデータ行へのポインタもよいです。オブジェクトnext()メソッド、次の行になるようにポインタ、列数または削除に、データ・フィールド名。next()メソッドがnullを返す場合ならば、次の行のデータがないことを示しています。次のサンプルコードを使用します:
ResultSetのresultSel = statement.executeQuery( "スタッフSELECT * FROM");
図6は、データベース接続を閉じる:データベースまたはデータ接続を閉じる接続close()メソッドを介してデータベースにアクセスする必要の使用を終了します。
コードのデモ
- <前の名前=「コード」クラス=「javaの」>パッケージchp07。
- インポートのjava.sql.Connection;
- インポートのjava.sql.DriverManager。
- インポートのjava.sql.ResultSet;
- 輸入ます。java.sql.SQLException;
- 輸入java.sql.Statementの。
- パブリッククラスJDBC_Test {
- //静的なグローバル変数を作成します。
- 静的接続CONN。
- 静的ステートメントST;
- パブリック静的無効メイン(文字列[] args){
- 挿入(); //が挿入されたレコードを追加
- アップデート(); //更新レコードデータ
- 削除(); //レコードを削除
- クエリ(); //クエリとレコードを表示します
- }
- / *挿入データレコード、レコード数と*挿入されたデータを出力/
- パブリック静的ボイド挿入(){
- CONN =のgetConnection(); //最初の接続を取得し、即ち、データベースに接続します
- {試します
- 文字列のSQL = "スタッフ(名前、年齢、性別、住所、worklen、賃金を出発予定日)。INSERT INTO"
- + "VALUES( 'TOM1'、32、 'M'、 '中国'、 '人事'、 '3'、 '3000')"; SQL文//データを挿入
- ST =(声明)conn.createStatement(); // Statementオブジェクトを実行するための静的SQLステートメントを作成
- int型のカウント= st.executeUpdate(SQL); //挿入するSQL文の実行の数、および挿入するためにデータを返します
- System.out.println(「テーブルに挿入スタッフ」+カウント+「データの断片」)、挿入操作の//出力処理結果
- conn.close(); //接続を閉じます
- }キャッチ(のSQLException e)の{
- System.out.println(+ e.getMessage() "の挿入データが失敗しました");
- }
- }
- / *レコードの要件を満たし、更新されたレコードの数を返すように更新しました* /
- パブリック静的ボイド更新(){
- CONN =のgetConnection(); //データベースへの接続、すなわち、同じ第1の接続を取得
- {試します
- 文字列のSQL =「更新スタッフセット賃金= 『2200の』 name = 『ルーシー』」; //更新データのSQL文
- ST =(声明)conn.createStatement(); // Statementオブジェクトを作成しますが、静的SQL文を実行し、STはローカル変数であります
- int型のカウント= st.executeUpdate(SQL); //更新操作の数がSQL文を実行したが、更新されたデータを返します。
- System.out.println(「スタッフテーブルの更新」+ +「データの断片」カウント);更新操作の処理結果//出力
- conn.close(); //接続を閉じます
- }キャッチ(のSQLException e)の{
- System.out.println( "データの更新に失敗しました");
- }
- }
- / *データベース、レコードの要件への準拠の出力を照会します* /
- パブリック静的ボイドクエリ(){
- CONN =のgetConnection(); //データベースへの接続、すなわち、同じ第1の接続を取得
- {試します
- 文字列のSQLが=「スタッフから*を選択して」; //クエリデータのSQLステートメント
- ST =(声明)conn.createStatement(); // Statementオブジェクトを作成しますが、静的SQL文を実行し、STはローカル変数であります
- ResultSetのRS = st.executeQuery(SQL)であり; // SQLクエリを実行し、クエリデータの結果セットを返します
- System.out.println(「最終結果は次のとおり」)。
- (rs.next()){//次のデータがあるか否かを判断しながら
- //フィールド名に基づいて適切な値を取得します
- 文字列名= rs.getString( "名前");
- int型の年齢= rs.getInt( "年齢");
- 文字列のセックス= rs.getString( "性別");
- 列アドレス= rs.getString(「アドレス」)。
- 文字列出発= rs.getString(「出発」)。
- ストリングworklen = rs.getString( "worklen")。
- ストリング賃金= rs.getString(「賃金」)。
- //の分野で見られる出力値を記録
- System.out.println(名前+ "" +年齢+ "" +性別+ "" +アドレス
- + "" +出発+ "" + worklen + "" +賃金)。
- }
- conn.close(); //接続を閉じます
- }キャッチ(のSQLException e)の{
- System.out.println( "クエリデータに失敗しました");
- }
- }
- / *、出力の要件と一致したレコードを削除します* /
- 公共の静的な無効(削除){
- CONN =のgetConnection(); //データベースへの接続、すなわち、同じ第1の接続を取得
- {試します
- 文字列のSQL =「削除スタッフから名= 『リリ』」; //は、SQL文のデータを削除
- ST =(声明)conn.createStatement(); // Statementオブジェクトを作成しますが、静的SQL文を実行し、STはローカル変数であります
- int型のカウント= st.executeUpdate(SQL); // SQL DELETEステートメントの数を実行するには、削除データを返さ
- System.out.println(「スタッフテーブルの削除」+「データ\ nの目」+カウント); //は、演算処理結果の出力を削除
- conn.close(); //接続を閉じます
- }キャッチ(のSQLException e)の{
- System.out.println( "データが失敗した削除");
- }
- }
- / *データベース接続機能を取得します* /
- パブリック静的接続のgetConnection(){
- 接続CON = NULL; //データベースに接続するために使用される接続オブジェクトを作成します
- {試します
- Class.forNameの( "はcom.mysql.jdbc.Driver"); //データドライバロードのMysql
- CON =したDriverManager.getConnection(
- "JDBCます。mysql:// localhostを:3306 / myuserの"、 "根"、 "ルート"); //データ接続を作成します
- }キャッチ(例外e){
- System.out.println( "データベース接続に失敗しました" + e.getMessage());
- }
- 詐欺を返す; //は、確立されたデータベース接続を返します
- }
- }