JDBCデータベース接続テクノロジー

###### JDBC


-Javaデータベース接続、Javaデータベース接続。実際、JDBCは、データベースと対話するJavaのAPI(アプリケーションプログラムインターフェイス)のセットです。

 

##### JDBCを使用する理由


-Javaは複数のデータベースに接続する必要があるため、各データベースが新しいAPIのセットを学習するのを避けるために、Sunは一連のjdbc標準(インターフェース、メソッド宣言)を定義し、さまざまなデータベースベンダーがこのインターフェースに基づいてメソッド実装を記述しています(データベースドライバー)。したがって、Javaプログラマーはjdbcインターフェースのメソッド呼び出しをマスターし、任意のデータベースに接続するための一連のメソッドをマスターし、jdbc規格に準拠する一連のコードは任意のデータベースに接続できます。

    エクストラネット:maven.aliyun.com
pom.xmlはjarパッケージアドレスを導入します<dependencies> </ dependency>
##### jdbcの使用方法
1. mavenプロジェクトの作成
2. Maven エクストラネット検索mysql jarパッケージをプロジェクトに配置するpom.xmlの
操作次のとおりです:
                // 1.ドライバーを登録します
// com.mysql.jdbc.Driver
        Class.forName( "com.mysql.jdbc.Driver");
        // 2.接続オブジェクトを取得します
        Connection connection = DriverManager.getConnection ( "jdbc:mysql:// localhost:3306 / db3"、 "root"、 "lf215000");
        System.out.println(connection);
        // 3. SQL実行オブジェクトを作成する
        Statementステートメント= connection.createStatement();
        // 4. SQLを実行
//文字列sql = "存在しない場合はテーブルを作成jdbct1(id int、name varchar(10))"; //存在しない場合は作成
        文字列sql = "drop table present if jdbct1";
        statement.execute(sql);
        System.out.println( "执行成功!");
        // 5。关闭资源
        statement.close();
        connection.close();

##### SQLオブジェクトを実行する方法


-execute(sql)このメソッドの戻り値は結果セット(ブール)があるかどうかを表します。このメソッドは任意のSQLを実行できますが、DDL(データ定義言語create drop alter truncate)を実行することをお勧めします
-executeUpdate(sql)はこのメソッドの追加、削除、変更を実行できます戻り値は、有効な行数を示すint型です
-executeQuery(sql)はクエリSQLステートメントを実行し、戻り値は結果セットです

 

######データベースタイプとJavaタイプの比較


   mysql java
   int getint
   varchar getString
   float / double getfloat / getDouble
   datetime / timestamp getDate


   
###### resultSetデータを取得する2つの方法


1.getString(フィールド名)
2.getString(クエリ結果フィールドの位置)は1から始まります

######プロパティプロパティ構成オブジェクト
-* .properties構成ファイル(キーと値のペアのキー:値)のデータを読み取るために使用されます
-usage:
            //プロパティオブジェクトを作成します
            プロパティプロパティ=新しいプロパティ();
            / /ファイル入力ストリームを取得します
            InputStream inputStream = Demo04.class.getClassLoader()。GetResourceAsStream( "jdbc.properties");
            //オブジェクトにファイルを読み込みます
            properties.load(inputStream);
            //データを読み取ります
            文字列名= properties.getProperty( "name");
            //読み取られたものは             すべて
            String 型ですage = properties.getProperty( "age");
System.out.println( "name =" + name + "age =" +年齢);


#### DBCPデータベース接続プール
-
データベース接続プール-データベース接続プールを使用する理由:

データベース接続プールがない場合、Webサーバーはデータと対話するたびに接続を確立する必要があります。それを使用した後、接続を閉じます。10,000の対話がある場合、10,000の接続の開始と終了が発生します。接続のオンとオフを頻繁に切り替えると、リソースの無駄になります。データベース接続プールを使用して、接続の初期数と最大接続数を設定できます。データとの各対話は、接続プールから切断され、接続を切断する代わりに接続プールに戻されます。これにより、再生できます。リソースの浪費を回避するためのデータベース再利用の役割-
データベース接続プールの使用方法


###### StatementとPreparedStatement


-PrepareStatementプリコンパイルされたSQL実行オブジェクト
1.利点は、SQLのロジックがコンパイル時に指定されているためSQLインジェクションを回避でき、置換されたコンテンツのためにロジックが変更されないこと
です。2. SQLがステートメント文字列のステッチ方法と比較して変数を含む場合、コードの可読性が向上し、ミスを犯しにくくなります。3
。複数のSQLのバッチ実行が含まれる場合にPreparedStatementを使用する方が効率的である場合 
-SQLに変数がない場合は、Statementを使用し、変数はPreparedStatementを使用します。
   

#######バッチ操作

-Statementバッチ
            ステートメント= connection.prepareStatement(sql);
            for(int i = 0; i <100; i ++){
                statement.setString(1、 "name" + i);
                statement.setString(2、 "admin" + i );
                //バッチ操作
                ステートメントを追加します。addBatch ();
                if(i%20 == 0){
                    //バッチ操作
                    ステートメントを
                    実行します。statement.executeBatch (); //実行されたSQL
                    ステートメントを空にします。clearBatch();
                }
            }
            / /バッチ操作を実行し、残りの
            ステートメントを閉じます。executeBatch ();


#######トランザクション


1.自動送信をオン/オフにします
    connection.setAutoCommit(false / true);
2.トランザクション
    を送信しますconnection.commit();
3. connection.rollback();をロールバックし
    ます

-Realize転送:
 スーパーマン500バットマン5000
 バットマンからスーパーマン2000への転送
最初の成功した
実行2番目の成功した
実行3番目の失敗残高が不十分でロールバックされた

テーブルjdbc_personを作成(id int、name varchar(10)、money int);
jdbc_personに挿入しますvalues(1、 '超人'、500)、(2、 '大胆不潔'、5000);

-コード参照demo08.java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class Demo08 {
    public static void main(String [] args){
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            connection = DBUtils.getConnection();
            statement = connection.createStatement(); 
            //トランザクションを開く(自動             送信をオフにする)
            connection.setAutoCommit(false);
            // SQLを転送する準備をする
String sql1 = "update jdbc_person set money = money-2000 where id = 2";
            String sql2 = "update jdbc_person set money = money + 2000 where id = 1 ";
            // transfer
            ステートメントを実行します。executeUpdate(sql1);
            statement.executeUpdate(sql2);
            //バットマンの残金が0以上かどうかを照会します
            String sql3 = "select money from jdbc_person where id = 2";
            resultSet = statement.executeQuery(sql3);
            while(resultSet.next()) {
                int money = resultSet.getInt( "money");
                if(money> = 0){// money is十分な
                    connection.commit();
                    System.out.println( "Transfer successful");
                }それ以外の場合{// moneyは十分ではありません
                    connection.rollback();
                    System.out.println( "Transfer failed");
                }
            }
        } catch(例外e){
            e.printStackTrace();
        }最後に{
            DBUtils.close(connection、statement、resultSet);
        }
    }
}
 

 

######増分主キーの値を取得します


   テーブルチームを作成(id int primary key auto_increment、name varchar(10));
   テーブルプレーヤーを作成します(id int主キーauto_increment、name varchar(10)、tid int);
ヌル

例:

八尾明ロケット

チームテーブル
ID名
 1ロケッツ
プレーヤーテーブル
ID名tid
   八尾明1

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

パブリッククラスDemo09 {

    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        System.out.println( "Please enter the team name:");
        String teamName = sc.nextLine();
        System.out .println( "プレイヤー名を入力してください:");
        String playerName = sc.nextLine();
        sc.close();
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            connection = DBUtils.getConnection( );
            //最初にチームが存在するかどうかを確認します。チームIDがある場合
            String s = "select id from team where name =?";
            Statement = connection.prepareStatement(s);
            statement.setString(1、teamName);
            resultSet = statement.executeQuery();
            int teamId = -1;
            while(resultSet.next()){
                //データベースからレポートをクエリします
                teamid teamId = resultSet.getInt( "id");
            }
            if(teamId ==- 1){//チームは
                String sql = "insert into team values(null、?)";の前に保存されていません;
                //ステートメントを複数回作成すると、閉じられていないことを警告し、前のステートメント
                statement.close()を閉じてから警告します;
                statement = connection.prepareStatement(sql、Statement.RETURN_GENERATED_KEYS);
                statement.setString(1、teamName);
                statement.executeUpdate();    
                //自動インクリメントの主キーを取得します
                resultSet.close();
                resultSet = statement.getGeneratedKeys();
                while(resultSet.next()){
                    teamId = resultSet.getInt(1);
                }
            }
            //之前保存過球队
            //挿入入球员
            String sql1 = "insert into player values(null、?、?)";
            ステートメント= connection.prepareStatement(sql1);
            statement.setString(1、playerName);
            statement.setInt(2、teamId);
            statement.executeUpdate();
        } catch(例外e){
            e.printStackTrace();
        }最後に{
            DBUtils.close(connection、statement、resultSet);
        }
    }

}
 


#####ソースデータ-
ソースデータは、データベースとテーブルに関連する情報を指します

例:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

/ **
 *ソースデータ(データベースの基本情報またはテーブルの基本情報)
 * @author BARCA球王= Andrew Feng
 * @version 1.0
 * @see      
 * @since
 * /
public class Demo10 {
    public static void main(String [] args) {
         Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            connection = DBUtils.getConnection();
            statement = connection.createStatement();
            //データベースソースデータオブジェクトを取得します
            DatabaseMetaData metaData = connection.getMetaData();
            System.out.println( "ドライブバージョン" + metaData.getDriverVersion());
            System.out.println( "ユーザー名" + metaData.getUserName());
            System.out.println( "接続アドレス" + metaData.getURL());
            System.out.println( "データベース名" + metaData.getDatabaseProductName ());
            
            //テーブルのメタデータを取得します
            resultSet = statement.executeQuery( "select * from emp");
            ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
            //テーブルのフィールドを取得します
            int columCount = resultSetMetaData.getColumnCount();
            
            / /
            (int i = 0; i <columCount; i ++)のフィールド名取得します{
                文字列名= resultSetMetaData.getColumnName(i + 1);
                文字列型= resultSetMetaData.getColumnTypeName(i + 1);
                System.out.println(name + ":" + type);
            }
        } catch(例外e){
            e.printStackTrace();
        }最後に{
            DBUtils.close(connection、statement、resultSet);
        }
    }
}


 

元の記事を33件投稿しました 賞賛されました4 アクセス2717

おすすめ

転載: blog.csdn.net/qq_41650000/article/details/83317379