JDBC:JAVA&オラクル
この記事では、注釈付きのリソースは、実験材料ポリUデータベースコースからのものではありません。侵害、してください連絡先は削除した場合にのみ、使用する学習
JDBCとは何ですか
データベースとJAVAについて前に私が書いたボーエン、ラベルここで直接コンテンツに関連します:
Javaデータベースコネクティビティ(Javaデータベース接続、と称するJDBC)は、Java言語は、クライアント・プログラムは、データベース内の照会及び更新データ等の方法を提供するアプリケーション・データベース・インターフェースにアクセスする方法を調整するために使用されます。JDBCははまた、Sun Microsystems、Inc.の商標です。JDBCは、リレーショナルデータベースを向いています。
Javaは、Javaコードの一様なセットですべてのリレーショナルデータベースの操作を可能にする、すべてのリレーショナルデータベースを操作するルール(インタフェース)セット、データベース・ソフトウェアの特定の実装のための各責任を定義し、実際に、方法インタフェースタイプを呼び出しています実装の方法は、クラスを実現しています
JDBCドライバの4種類
- JDBCブリッジドライバ。
このタイプは、オープンデータベースコネクティビティ(ODBC)などのサードパーティのAPIにJavaクライアントを接続するブリッジ技術を使用しています。 - ネイティブAPI(一部はJavaドライバ)。
ドライバのこのタイプは、JavaクラスとネイティブAPIをラップします。 - ネットワークプロトコル(Pure Javaドライバ)。
ドライバのこのタイプは、中間層サーバーへのネットワーク・プロトコルを使用して通信します。 - ネイティブプロトコル(Pure Javaドライバ)。
Javaで書かれたドライバのこのタイプは、データベースと直接通信します。
OracleのJDBC達成
JDBC OCIドライバは、
これは、OracleのネイティブOCIインタフェースを使用してタイプ2のドライバです。これは、一般的にOCIドライバと呼ばれています。JDBC Thinドライバは、
これはタイプ4、100%純粋なJavaドライバで、クライアント側での使用のために。(私たちは私たちの研究室で使用ドライバ)。これは、アプリケーションおよびアプレットで使用することができます。これは、プラットフォームに依存しないで、クライアント側に追加のOracleソフトウェアは必要ありません。
JDBC Thinドライバは、アクセスOracleデータベースにSQL * Netを使用してサーバーと通信します。
個人的な感情、これの主な目的は、アプリケーションサービス、冷蔵の使用を駆動することです
JDBC内部ドライバ
これは、タイプ2、ネイティブコードドライバのJavaコードとサーバー側の使用のためにそのOracleデータベースのJServerのJVM内で実行されます。JDBCサーバー側Thinドライバは、
これは、タイプ4のための100%純粋なJavaドライバサーバー側 Javaコードで使用されているOracleデータベースのJServerのJVM内で実行されます。このJavaクラスをデータベースにコンパイルされたら、あなたはそれのメソッドのコール仕様を公開する必要があります。このメソッドは、PL / SQLから呼び出すことができるようにするためにPL / SQL「ラッパー」を書き込む必要。次のコードサンプルは、数学のメソッドAddを公開する加算と呼ばれる関数を作成します。
します。https://oracle-base.com/articles/8i/jserver-java-in-the-database
個人的な感情は、このドライブの主な目的は、サービスへのデータベースの機能、データベース自体を強化するために使用されます
JDBC練習
ここでは、jarファイルのパッケージを実現してOracle DatabaseとOracleデータベースのJDBC対応を選択した:ojdbc7.jar
IDEAプロジェクト頼るには、jarパッケージの追加、IDEAの下で新しいプロジェクトを作成します。ファイル - >をプロジェクト構造 - > Modules-> Dependencies->プラス記号をクリックしてください - > JARSや辞書
レッツは、簡単なデモを(個人情報に関連するコードは、<>の代わりに使用されている)を実行します。
import java.io.*; import java.sql.*; import oracle.jdbc.driver.*; import oracle.sql.*; public class JDBC { public static void main(String args[]) throws SQLException, IOException { String username, password; username = "<userName>"; // Your Oracle Account ID password = "<password>"; // Password of Oracle Account //-----------Connection-------------------------------- //Register JDBC driver DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //JDBC Thin driver-This is a Type 4, 100% pure Java driver for client-side use. //DriverManager.getConnectioin(String url, String username, String password) //url = jdbc:oracle:driver:@database:port:sid OracleConnection conn = (OracleConnection)DriverManager.getConnection( "jdbc:oracle:thin:<database>:1521:dbms", username, password); //A Statement object is a class which sends your SQL statement to the DBMS. Statement stmt = conn.createStatement(); //Pass SQL statement on to the DBMS. //For SELECT statement, the method to use is executeQuery. // For statements that create or modify tables, the method to use is executeUpdate. //declare a reference of the class ResultSet to hold our results ResultSet rset = stmt.executeQuery("SELECT EMPNO, ENAME, JOB FROM EMP"); while (rset.next())//when next is not null { System.out.println(rset.getInt(1) + " " + rset.getString(2) + " " + rset.getString(3)); } System.out.println( ); conn.close(); } }
説明するために、コードのこの部分に次へ:
輸入ジャー包
import java.io.*; import java.sql.*; import oracle.jdbc.driver.*; import oracle.sql.*;
JDBCドライバを登録します。
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
接続を確立するには:
OracleConnection conn =(OracleConnection)DriverManager.getConnection("jdbc:oracle:thin:<database>:1521:dbms",username, password);
2つの形式で接続を確立するには:
DriverManager.getConnectioin(String url, String username, String password) url = jdbc:oracle:driver:@database:port:sid OR DriverManager.getConnection(String url) url = jdbc:oracle:driver:username/password@database:port:sid
SQLを実行するためのオブジェクトを取得します:
Statement stmt = conn.createStatement();
SQLを実行します。実行の異なる方法のためのSQL文が同じではありません。
//执行DQL,例如select,返回结果集合(ResultSet) stmt.executeQuery(“SELECT * FROM EMP”); //执行DML,例如insert\update\delete,返回一个int,表示受影响的行数 stmt.executeUpdate(“CREATE TABLE COFFEES “ + “ (COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, “ + “ SALES INTEGER, TOTAL INTEGER)”); Boolean stmt.execute(String sql)//可以执行任意sql,返回是否执行成功
ポイントは、ここで注意するそれ以外の場合は、クエリではありませんが、操作が行われた後、Oracleデータベースを手動でコミットすることを覚えなければならないということです。しかし、何のエラーを見つけることはできません、ただResultSetが空のオブジェクトで返され、その方法は次のリターンがfalse見ることができます呼び出します。
- ResultSetの抽出結果で:
while (rset.next())//when next is not null { System.out.println(rset.getInt(1) + " " + rset.getString(2) + " " + rset.getString(3)); } System.out.println( );
- 接続を閉じます。
conn.close();
プリペアドステートメント
準備された文のPreparedStatementは、それがサブインターフェースステートメントでインタフェースjava.sqlです。SQL文がStatementオブジェクト、SQLステートメントによって実行された場合、我々は最初のDBMSでコンパイルして実行、DBMSに送信する必要があります。準備文と文の異なる、あなたはDBMSをコンパイルするためにすぐに送信されるSQL文を指定するためのPreparedStatementオブジェクトを作成します。ステートメントのコンパイルが実行される場合の場合は、DBMSは、まず他のSQL文のようにコンパイルする必要なしに、直接コンパイルされたSQL文を実行します。プリコンパイルされたSQL文の処理性能は、変数を渡す通常の方法よりもわずかに高いです。
----------------
免責事項:この記事はCSDNブロガー「yushuifirstの元記事である、CC 4.0 BY-SAの著作権契約書に従ってください、複製、元のソースのリンクと、この文を添付してください。 。
オリジナルリンクします。https://blog.csdn.net/yushuifirst/article/details/45201623プリコンパイルされた使用:
PreparedStatement prepareQuery = conn.prepareStatement( "SELECT ENO, ENAME, ZIP, HDATE FROM EMPLOYEES WHERE ENO = ?"); System.out.println( "Enter -1 to quit program when prompted for employee number"); System.out.println(); snum = readEntry("employee number: "); enumber = Integer.valueOf(snum).intValue(); while (enumber != -1) { prepareQuery.setInt(1, enumber); rset = prepareQuery.executeQuery(); while (rset.next()) { System.out.println(rset.getInt(1) + " " + rset.getString(2) + " " + rset.getInt(3) + " " + rset.getDate(4)); } snum = readEntry("employee number: "); enumber = Integer.valueOf(snum).intValue(); }
SQLは、ここに変数のプレースホルダを使用していますか?これは、我々が繰り返し何度も特定のタイプのクエリにしたいかもしれませんがあるため、ある程度の柔軟性は、SQLをプリコンパイル、必ずしも毎回エンティティまたは属性が同じではない、しかし、あなたが直接、これらのデータを指定することはできませんと言うことはできませんので、あらかじめ与えますプレースホルダを使用してコンパイルされたSQL文は非常に一般的です。
パラメータの形式を渡すためにコンパイル済みSQL文は次のとおりです
<prepareQuery.setInt(<第几个参数>,<参数值>);
。質量参加した後、正常に実行することができます。JDBCトランザクション
これをしたいが、手動でコミットしたくない場合は、JDBCコマンドが自動的に設定することができ、コミットされている
conn.setAutoCommit(false) 。之后想要提交的话,就要调用这个方法:
)(conn.commitを.想要恢复的话,也是这个方法:conn.setAutoCommit(true);
その後、ロールバックされ、自動コミットをオフにするだけでなく、私たちが間違っている場合は手続きを容易にします。自動提出を閉じた後、我々はこの方法を置くことができる
conn.rollback();
のtry-catch-最終的に例外処理へJDBC呼び出し可能声明
ストアドプロシージャは、論理ユニットを形成し、特定のタスクを実行するSQL文のグループです。
データベースに簡単なストアドプロシージャを作成します。
CREATE PROCEDURE SHOW_STAFF AS SELECT ENAME,JOB,MGR,HIREDATE FROM EMP ORDER BY ENAME;
CallableStatementオブジェクトは、ストアドプロシージャ自体が含まれていない、ストアドプロシージャへの呼び出しが含まれています。
CallableStatement cs = conn.prepareCall(“{call SHOW_STAFF}”); ResultSet rset = cs.executeQuery();
ドライバ遭遇「{コールSHOW_STAFFは}」、それはこのエスケープ構文を変換する時期(转义语法)するために、データベースによって使用されるネイティブSQLにSHOW_STAFFという名前のストアドプロシージャを呼び出します。