JDBCに対する認識


概要
        JDBC(java DataBase Connectivity,javaデータベース接続)は、SQL文を実行するJava APIで、Java言語で記述されたクラスとインタフェースのセットからなる複数のリレーショナル・データベースへの統合アクセスを提供します.
JDBC共通インタフェース
        JAva APIはJDBCへの管理リンクを提供する.JAva Driver APIはJDBCのドライブ接続管理をサポートする  1、Driverインタフェース    Driverインタフェースはデータベースメーカーから提供されており、java開発者としてはDriverインタフェースを使うだけでよい.プログラミングでデータベースに接続するには、まず特定のベンダーのデータベースドライバをマウントする必要があります.異なるデータベースには異なるマウント方法2、Connectionインタフェースがあります.  接続は特定のデータベースに接続され、接続コンテキストでsql文を実行し、結果を返します.DriverManager.getConnection(url,user,password)メソッドは、JDBC URLで定義されたデータベースConnection接続に確立されます.   MySqlデータベースへの接続:
Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password"); 

    Oracleデータベースへの接続:
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");

    SqlServerデータベースへの接続:
Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");

    一般的な方法:
createStatement()sql statementprepareStatement(sql)sql PrepareSatementprepareCall(sql)callableStatementsetAutoCommit(boolean autoCommit):          。
commit() :        。
rollback() :         。

3、Statementインタフェース   静的SQL文を実行し、生成された結果を返すオブジェクト     一般的なStatementメソッド:
execute(String sql):    ,        
executeQuery(String sql):  select  ,  ResultSet   。
executeUpdate(String sql):  insert/update/delete  ,       。
addBatch(String sql) :   sql          。
executeBatch():        sql

4、ResultSetインタフェース   ResultSetでは、次のようなさまざまなタイプのフィールドを取得する方法があります.
getString(int index)、getString(String columnName):        varchar、char        。
getFloat(int index)、getFloat(String columnName):        Float       。
getDate(int index)、getDate(String columnName):        Date     。
getBoolean(int index)、getBoolean(String columnName):        Boolean     。
getObject(int index)、getObject(String columnName):              。

   使用後、オブジェクトと接続を閉じます:ResultSet→Statement→Connection
JDBCを使用するには
      JDBCドライバのロード→データベース接続接続の確立→SQLを実行する文Statementの作成→実行結果ResultSetの処理→リソースの解放
取引
      トランザクションを説明する前に、トランザクションとは何かを理解しましょう.    文のセットでトランザクションを構成します.すべての文が順調に実行されると、トランザクションがコミットされます.それ以外の場合、文にエラーが発生した場合、トランザクションはロールバックされ、どの文も実行されていないようになります.    実際の例:ある銀行口座から別の口座にお金を移す必要があると仮定します.この場合、1つの非常に重要な問題は、1つのアカウントからお金を同時に取り出し、別のアカウントに保存しなければならないことです.他のアカウントにお金を預ける前にシステムがクラッシュした場合は、引き出し操作を取り消さなければなりません.      トランザクションの特性や役割は何ですか?    原子性:最小のユニットで、1つが失敗した場合、すべての操作が失敗します.    コンシステンシ:トランザクションにエラーが発生した場合、最も元の状態に戻ります.    独立性:複数のトランザクション間でアクセスできません.トランザクションが完了した場合にのみ結果が表示されます.    持続性:システムがクラッシュした場合でも、トランザクションをコミットできます.トランザクションが完了すると、オペレーション結果はディスクに保存され、ロールバックされません.
思考と総括
      質問1:JDBC接続を取得するには時間がかかることを知っています.チュートリアルを表示するときは、データベース接続を取得することをお勧めします.操作が終わったら、閉じることを忘れないでください.これは正しいです.ただし、単純な操作で接続をオンにして接続を切断すると、パフォーマンスが大幅に低下します.    質問2:JDBCの仕組み?また、どのような設計モデルを運用して、異なるデータベース・ベンダーの駆動に適応できるのでしょうか.    質問3:トランザクションのコミットと通常のコミットのパフォーマンスの違いはどれくらいですか?      接続プールという概念は、データベース接続という時間のかかる操作をコンテナに渡して管理することです.データベースの接続がいつ閉じられるかについては、いくつかのデータベース接続オブジェクトがありますか?これらは、クライアントが考慮する必要がなく、接続プールに完全に管理されています.現在、c 3 p 0の接続プールが成熟しています.次に、単一のデータベース接続をシミュレートし、単一のデータベース接続とオン・オフのパフォーマンスを比較します.     ツールクラス
public class DBUtil {
    public static String DRIVER="com.mysql.jdbc.Driver";
    public static String URL="jdbc:mysql://localhost:3306/test";
    public static String USERNAME="root";
    public static String PASSWORD="root";

    private  Connection connection=null;
    private DBUtil(){
    }
    /**
     *   DB      ,            jdk    。
     */
    public static  DBUtil getInstance(){
        return DBUtilClassInstance.dbUtil;
    }

    /**
     *          :      ,    ,     。    ,          -    
     */
    private static class DBUtilClassInstance{
        private  static  DBUtil dbUtil= new DBUtil();
    }

    /**
     *   JDBC  
     * @return
     */
    public  Connection getConnection(){
        try {
            if(null!=connection && !connection.isClosed()){
                return connection;
            }
            Class.forName(DRIVER);
            System.out.println("        !");
            connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
            return connection;
        } catch (Exception e) {
            System.out.println("       !");
            e.printStackTrace();
        }
        return null;
    }

    /**
     *         
     * @param fileName
     * @return
     * @throws SQLException
     */
    public   Connection getConnectionByLoadSettingFile(String fileName) throws SQLException {
        if(null!=connection && !connection.isClosed()){
            return connection;
        }
        Properties props=new Properties();
        try {
            InputStream in=DBUtil.class.getResourceAsStream("/"+fileName);
            if(null==in)
                System.out.println("     :"+fileName);
            props.load(in);
        } catch (Exception e) {
            e.printStackTrace();
        }
        String driver=props.getProperty("jdbc.driver");
        if(null!=driver)
            System.setProperty("jdbc.drivers",driver);
        String url=props.getProperty("jdbc.url");
        String username=props.getProperty("jdbc.username");
        String password=props.getProperty("jdbc.password");
        connection=DriverManager.getConnection(url,username,password);
        return connection;
    }