JDBC接続各種データベース経験テクニック

8731 ワード

Javaデータベース接続(JDBC)は、Javaプログラミング言語で記述されたクラスとインタフェースのセットから構成されています.JDBCは、純粋なJava APIでデータベースアプリケーションを記述できるように、ツール/データベース開発者に標準的なAPIを提供しています.しかし,各開発者のインタフェースは全く同じではないため,開発環境の変化は一定の構成変化をもたらす.本稿では,主に異なるデータベースの接続方式を集合した.
一、各種データベース接続方式の速報表
以下に各種データベースのJDBC接続方式を羅列し,マニュアルとして利用できる.
1、Oracleデータベース(thinモード)

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl     SID 
String user="test"; 
String password="test"; 
Connection conn= DriverManager.getConnection(url,user,password);

2、DB 2データベース

Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); 
String url="jdbc:db2://localhost:5000/sample"; //sample        
String user="admin"; 
String password=""; 
Connection conn= DriverManager.getConnection(url,user,password);

3、Sql Server 7.0/2000データベース

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; 
//mydb     
String user="sa"; 
String password=""; 
Connection conn= DriverManager.getConnection(url,user,password);

4、Sybaseデータベース

Class.forName("com.sybase.jdbc.SybDriver").newInstance(); 
String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB        
Properties sysProps = System.getProperties(); 
SysProps.put("user","userid"); 
SysProps.put("password","user_password"); 
Connection conn= DriverManager.getConnection(url, SysProps);

5、Informixデータベース

Class.forName("com.informix.jdbc.IfxDriver").newInstance(); 
String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; 
user=testuser;password=testpassword"; //myDB      
Connection conn= DriverManager.getConnection(url);

6、MySQLデータベース

Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" 
//myDB      
Connection conn= DriverManager.getConnection(url);

7、PostgreSQLデータベース

Class.forName("org.postgresql.Driver").newInstance(); 
String url ="jdbc:postgresql://localhost/myDB" //myDB      
String user="myuser"; 
String password="mypassword"; 
Connection conn= DriverManager.getConnection(url,user,password);

8、アクセスデータベース直結用ODBCの

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
Connection conn = DriverManager.getConnection(url,"","");
Statement stmtNew=conn.createStatement() ;

二、JDBC接続MySql方式
以下はJDBCを使用してMySqlに接続する小さなチュートリアルです.
1、ドライバの検索
MySQLが現在提供しているjavaドライバはConnection/Jで、MySQLの公式サイトからダウンロードでき、mysql-connector-java-5.1-bin.jarファイルを見つけることができます.このドライバは純粋なjavaドライバで、他の構成は必要ありません.
2、動的指定classpath
実行時にclasspathを動的に指定する必要がある場合は、実行時に-cp方式を採用します.そうでなければ、上の.jarファイルをclasspath環境変数に追加します.
3、ドライバのロード

try{
 Class.forName(com.mysql.jdbc.Driver);
 System.out.println(Success loading Mysql Driver!);
}catch(Exception e)
{
 System.out.println(Error loading Mysql Driver!);
 e.printStackTrace();
}

4、接続urlの設定

jdbc:mysql://localhost/databasename[?pa=va][&pa=va]

三、JDBCを使用してOracleデータベースに接続する際に使用できるテクニックを以下に示します.
1.クライアントソフトウェア開発においてThinドライバを使用する
Javaソフトウェアの開発では、Oracleのデータベースには、アプリケーション、applets、servletsなどのクライアントソフトウェア、データベース内のJavaストレージ・プロシージャなどのサーバ・エンド・ソフトウェアの4種類のドライバが用意されています.クライアント側ソフトウェアの開発では、OCIドライバまたはThinドライバを選択できます.OCIドライバは、Javaローカライズインターフェース(JNI)を使用して、Oracleクライアントソフトウェアを使用してデータベースと通信します.Thinドライバは、データベースと直接通信する純粋なJavaドライバです.最高のパフォーマンスを得るために、Oracleはクライアント・ソフトウェアの開発でOCIドライバを使用することを推奨しています.これは正しいようです.しかし、Thinドライバを使用することをお勧めします.複数回のテストで発見されたため、通常、Thinドライバの性能はOCIドライバを上回っています.
2、自動提出機能をオフにし、システム性能を向上する
データベースへの接続が最初に確立されると、デフォルトでは自動コミットモードで接続されます.パフォーマンスを向上させるには、ブール値falseパラメータを持つConnectionクラスのsettoAutoCommit()メソッドを呼び出すことで、次のように自動コミット機能をオフにできます.
conn.setAutoCommit(false);
自動コミット機能をオフにすると、Connectionクラスのcommit()メソッドとrollback()メソッドを呼び出してトランザクションを手動で管理する必要があることに注意してください.
3、動的SQLまたは時間制限のあるコマンドでStatementオブジェクトを使用する
SQLコマンドの実行には、PreparedStatementオブジェクトを使用するか、Statementオブジェクトを使用するかの2つの選択肢があります.同じSQLコマンドを何度使用しても、PreparedStatementは一度だけ解析およびコンパイルされます.Statementオブジェクトを使用すると、SQLコマンドが実行されるたびに解析およびコンパイルされます.これにより、PreparedStatementオブジェクトを使用すると、Statementオブジェクトを使用するよりも高速になると考えられます.しかし、私が行ったテストでは、クライアントソフトウェアではそうではないことが明らかになりました.したがって、時間制限のあるSQL操作では、SQLコマンドを一括処理しない限り、Statementオブジェクトの使用を考慮する必要があります.
また、Statementオブジェクトを使用すると、文字列を接続して有効なSQLコマンドを確立できるため、動的SQLコマンドの作成がより簡単になります.したがって、Statementオブジェクトは、動的SQLコマンドの作成と実行をより簡単にすることができると思います.
4、helper関数を利用して動的SQLコマンドをフォーマットする
Statementオブジェクトを使用して実行される動的SQLコマンドを作成する場合は、フォーマットに関する問題を処理する必要があります.たとえば、テーブルに名前O'Reillyを挿入するSQLコマンドを作成する場合は、O'Reillyの'''番号を2つの接続された'''番号で置き換える必要があります.これらの作業を完了する最善の方法は、置換操作を完了するhelperメソッドを作成し、文字列を接続して式を服用してSQLコマンドを表現するときに、作成したhelperメソッドを使用することです.これと同様に、helperメソッドにDate型の値を受け入れ、Oracleベースのto_を出力させることができます.date()関数の文字列式.
5.PreparedStatementオブジェクトによるデータベース全体の効率化
PreparedStatementオブジェクトを使用してSQLコマンドを実行すると、コマンドはデータベースによって解析およびコンパイルされ、コマンドバッファに配置されます.その後、同じPreparedStatementオブジェクトを実行するたびに、再解析されますが、再コンパイルされません.バッファには、プリコンパイルされたコマンドが見つかり、再使用できます.多数のユーザーがいるエンタープライズアプリケーションでは、同じSQLコマンドを繰り返し実行することが多く、PreparedStatementオブジェクトを使用することでコンパイル回数の減少により、データベース全体のパフォーマンスが向上します.クライアントがPreparedStatementタスクを作成、準備、実行するのに要する時間がStatementタスクより長い場合でない場合は、動的SQLコマンド以外のすべての場合にPreparedStatementオブジェクトを使用することをお勧めします.
6、一括処理の重複する挿入または更新操作においてPreparedStatementオブジェクトを使用する
挿入および更新操作を一括して処理すれば、それらに要する時間を著しく低減することができる.Oracleが提供するStatementおよびCallableStatementでは、バッチは実際にサポートされておらず、PreparedStatementオブジェクトのみがバッチをサポートしています.addBatch()メソッドとexecuteBatch()メソッドを使用して、標準のJDBCバッチを選択するか、PreparedStatementオブジェクトのsetExecuteBatch()メソッドと標準のexecuteUpdate()メソッドを使用して、より高速なOracle固有のメソッドを選択できます.Oracle固有のバッチ・メカニズムを使用するには、setExecuteBatch()を次のように呼び出すことができます.

PreparedStatement pstmt3D null;
try {
 ((OraclePreparedStatement)pstmt).setExecuteBatch(30);
 ...
 pstmt.executeUpdate();
}

setExecuteBatch()を呼び出すと指定した値が上限になり、その値に達するとSQLコマンドの実行が自動的に開始され、標準のexecuteUpdate()メソッドがバッチとしてデータベースに送られます.PreparedStatementクラスのsendBatch()メソッドを呼び出すことで、バッチ・タスクをいつでも転送できます.
7.Oraclelocatorメソッドを使用して、大きなオブジェクトを挿入、更新する(LOB)
OracleのPreparedStatementクラスでは、BLOBやCLOBなどの大きなオブジェクトの処理は完全にサポートされていません.特にThinドライバでは、PreparedStatementオブジェクトのsetObject()やsetBinaryStream()メソッドを使用してBLOBの値を設定することはサポートされていません.setCharacterStream()メソッドを使用してCLOBの値を設定することもサポートされていません.locator自体のメソッドのみが、データベースからLOBタイプの値を取得できます.PreparedStatementオブジェクトを使用してLOBを挿入または更新できますが、LOBの値を取得するにはlocatorを使用する必要があります.この2つの問題があるため、locatorの方法を使用してLOBの値を挿入、更新、または取得することをお勧めします.
8.SQL 92構文を使用してストレージプロセスを呼び出す
ストレージ・プロシージャを呼び出すときにSQL 92またはOracle PL/SQLを使用できます.Oracle PL/SQLを使用すると実際のメリットはなく、後でアプリケーションを維持する開発者に迷惑をかけるため、ストレージ・プロシージャを呼び出すときにSQL 92を使用することをお勧めします.
9、Object SQLを使用してオブジェクトモードをデータベースに移す
Oracleのデータベースをオブジェクト向けのデータベースとして使用できる以上、アプリケーションのオブジェクト向けモードをデータベースに移行することも考えられます.現在の方法は、Java beanを偽装データベース・オブジェクトとして作成し、そのプロパティをリレーショナル・テーブルにマッピングし、これらのbeanにメソッドを追加することです.これはJavaでは問題ありませんが、操作はすべてデータベースの外で行われるため、他のデータベースにアクセスするアプリケーションはオブジェクトモードを利用できません.Oracleのオブジェクト指向テクノロジーを使用する場合は、新しいデータベース・オブジェクト・タイプを作成してデータベース内でデータと操作を模倣し、JPublisherなどのツールを使用して独自のJava beanクラスを生成できます.この方法を使用すると、Javaアプリケーションだけでなく、アプリケーションのオブジェクトモードも使用できます.また、アプリケーションのデータと操作を共有する必要があるアプリケーションでも、アプリケーションのオブジェクトモードも使用できます.
10、SQLを利用してデータベース内の操作を完成する
私が皆さんに紹介する最も重要な経験は、Javaなどのプロセス化されたプログラミング言語ではなく、SQLの集合向けの方法を十分に利用してデータベース処理のニーズを解決することです.
プログラマが1つのテーブルで複数のローを検索する場合、結果の各ローは他のテーブルのデータを検索し、最後にプログラマは独立したUPDATEコマンドを作成して最初のテーブルのデータを一括更新します.これと同様のタスクは、set句で複数のサブクエリを使用してUPDATEコマンドで実行できます.単一のSQLコマンドでタスクを完了できる場合、データをネットワーク上に流す必要はありませんか?ユーザーはSQLの機能を最大限に発揮する方法を真剣に学ぶことをお勧めします.
共有先:その他
固定リンク:http://www.itjhwd.com/jdbclianjieshujuku/
転載は明記してください:IT江湖2014年04月19日にIT江湖で発表します