MySQL データベース JDBC プログラミング (Java は MySQL に接続します)

MySQL データベース JDBC プログラミング (Java は MySQL に接続します)

1. データベースプログラミングの基本条件

データベースを操作するコードを実装する場合、実装の前提条件として次の条件を満たす必要があります。

プログラミング言語:

例えば、Java、C++、Pythonなど、これらの言語はすべてデータベースを操作できます

データベースに対する操作:

例えば、前の章ではMySQLの操作を紹介しました。Oracle、SQL Serverなどの他のデータベースを実装するには、対応するデータベースの操作もいくつか学ぶ必要があります。

データベース ドライバー パッケージをインストールします。

異なるデータベースでは、異なるプログラミング言語に対して異なるデータベース ドライバー パッケージが提供されます。これらのドライバー パッケージは、対応するデータベースを操作するための API を実装します。

2. Java でのデータベースプログラミング: JDBC

データベースベンダーによってデータベース API の実装方法が異なるため、多くの言語ではこれらのデータベース API を再度カプセル化して、統一された API セットを形成します。このようにして、一連のコードを通じて複数の異なるデータベースを操作することができます。

Java では、このようなカプセル化は、JDBC と呼ばれる統合データベース API をカプセル化する Java 標準ライブラリによって行われます。

拡大する:

Java 自体はクロスプラットフォーム言語です。異なるオペレーティング システムでは異なる API が提供されますが、Java 自体はこれらの API をカプセル化し、標準ライブラリで統一されたインターフェイスを提供します。そのため、Java は一度コンパイルすればどこでも実行できます。

JDBC の概要:

  • JDBC はJava Database Connectivityの略で、Java データベース接続を指します。 Java におけるデータベース接続仕様である SQL ステートメントを実行するためのJava APIです。
  • この API は、 java.sqlおよびjavax.sqlパッケージ内のいくつかのクラスとインターフェースで構成されています。Java 開発者がデータベースを操作するための標準 API を提供し、複数のリレーショナル データベースへの統一されたアクセスを提供できます。

知らせ:

  • JDBC API は Java 標準ライブラリの一部であり、直接使用できますが、MySQL JDBC ドライバーはシステムの一部ではないため、別途ダウンロードしてインストールする必要があります。
  • MySQL JDBC ドライバーは、実際には JDBC API のいくつかのクラスとインターフェースの特定の実装です。

3. JDBC アクセス データベース階層

4. MySQLデータベース操作の概要

前の章では、MySQL に関する知識をいくつか紹介しました。この分野で不足している部分がある場合は、次の記事を通じて直接補足することができます。

第1章リンク: [MySQLデータベース] データベースの基礎知識

第2章 リンク: [MySQL データベース] MySQL データベースの操作とデータ型

第3章 リンク: [MySQL データベース] データテーブルの基本操作

第 4 章 リンク: [MySQL データベース] データベース制約とデータ テーブル設計の原則

第 5 章 リンク: [MySQL データベース] 集計クエリと結合クエリの操作

第6章 リンク: [MySQL データベース] MySQL インデックスとトランザクション

5. MySQLドライバパッケージをダウンロードしてプロジェクトに追加します

MySQL JDBC ドライバーはシステムに含まれていないため、別途ダウンロードしてインストールする必要があります。

主要なデータベースの公式サイトには、対応するデータベース用のJDBCドライバーがありますが、ここではmvnrepositoryなどの中央リポジトリを使用してダウンロードすることをお勧めします。

ドライバー パッケージのダウンロード手順:

mvnrepositoryのウェブサイトにアクセスし、検索バーでMySQLを検索してください。次の結果が見つかります。

最初のMySQL Connector/Jを選択すると、ダウンロードバージョン選択ページに移動します。

データベースのバージョンに対応したドライバーを選択します(メジャーバージョンは対応している必要があり、マイナーバージョンはそれほど違いがなく、自由に選択できます)。私はMySQLの5.xシリーズを使用しているので、メジャーバージョン5を選択します。選択後、最終ダウンロードページに移動します

jar をクリックしてダウンロードを開始します (この jar パッケージは、このドライバー パッケージ内のいくつかの .class ファイルを圧縮パッケージの形式でパッケージ化するためのものです)

ダウンロードが完了すると、ドライバー パッケージがローカル コンピューターにダウンロードされます。これを使用するには、プロジェクトにインポートするだけです。

6. JDBCの使用手順

6.1 データベースソースを作成して接続する

データベース ソースを作成します。

データソース dataSource=新しい MysqlDataSource();
// DataSource は Java 標準ライブラリのインターフェースで、「データベースがどこにあるか」を示すために使用されます。
// MysqlDataSourceはMySQLのドライバパッケージです。DataSourceインターフェースを実装するクラスです

データベースはサーバープログラムです。DataSource DataSource 、サーバーアドレス、ポート、ユーザー名、パスワード、アクセスするデータベース名などを記述するために使用できます。

データベースの場所情報をDataSourceに設定する

// 1) URL を使用して、接続されたデータベース、データベース IP、ポート、データベース名、エンコード方式、および暗号化するかどうかを指定します ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&setSSL=false");
// 2) データベースにログインするためのユーザー名を設定します ((MysqlDataSource)dataSource).setUser("root");
// 3) データベースにログインするためのパスワードを設定します ((MysqlDataSource)dataSource).setPassword("1234");

setURLsetUsersetPasswordすべてMysqlDataSource実装されているため、使用時にはダウングレードする必要があります。上記の URL は固定の記述方法です。例: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&setSSL=false

  • jdbcはJDBCを使用してデータベースにアクセスすることを意味します
  • mysqlはアクセスされているデータベースがMySQLであることを意味します
  • 172.0.0.1 は IP アドレスです。IP アドレスはどのホストであるかを識別するために使用されます。IP アドレス 172.0.0.1 は現在使用されているホスト自体を表します。私のコンピューターには MySQL サーバーもインストールされているため、自分で変更しました。
  • 3306 は、データベース サーバーのインストール時に手動で設定されるポート番号です。通常、デフォルトは 3306 です。これは、ホスト上のプログラムを区別するために使用されます。
  • test はアクセスするデータベースの名前です。これは私のデータベースにあります。自分で変更してください。
  • characterEncoding=utf8エンコード方式を指定するために使用します。ここでは utf8 を使用します。使用するデータベースのエンコード方式に対応する必要があります。ご自身で変更してください。
  • useSSL=false暗号化を使用するかどうかを示すために使用されます。ここでは暗号化しないことを意味します。ご自身で変更してください。

データベースに接続し、実際のネットワーク通信を実行します。

接続 connection=dataSource.getConnection();


Connection Java 標準ライブラリにありますが、MySQL ドライバーでも利用できます。ネットワーク経由でデータベース サーバーに接続するために使用されます。
getConnection は、指定されたデータベース URL への接続を確立するために使用されます。接続が成功すると、 Connectionオブジェクトが返されます。失敗すると、例外がスローされます。getConnection getConnection接続に失敗する可能性があるので (たとえば、IP アドレスやポートなどの入力エラーが原因)、メソッド宣言で throws を介して上位の呼び出し元に例外をスローするか、 try-catchを使用して例外を処理する必要があります。

6.2 実行準備のためのSQL文の構築

文字列を介して実行されるSQLを構築する

// たとえば、新しい要素操作を実行するには(テーブル名はstudentで、2つの列idとstudentがあります)、
スキャナー scanner = new Scanner (System.in);
System.out.print("IDを入力してください: ");
int id=スキャナ.nextInt();
System.out.print("名前を入力してください: ");
文字列名 = scanner.next();
文字列 sql="学生の値に挿入(?,?)";

  1. sqlは、実行される特定の操作を含む構築されたSQL文です。
  2. SQL文にセミコロンを追加する必要はありません
  3. SQL ステートメント内のコンテンツを動的に置き換えるために使用できるワイルドカード文字を表します。置き換えられるコンテンツは、? で表されます。代わりに、PreparedStatement オブジェクトのいくつかのメソッドを使用して、変更する特定の値に置き換えます。

例えば:

void setInt(int paramenterIndex, int x) : paramenterIndex は、SQL ステートメント内で置換されるワイルドカードの特定の位置 (1 から始まる) を示し、x は置換される特定の値を示します。
void setString(int parameterIndex, String x) : paramenterIndex は、SQL ステートメント内で置換されるワイルドカードの特定の位置 (1 から始まる) を示し、x は置換される特定の値を示します。prepareStatement(sql) メソッドを通じて、構築された文字列 sql は、データベースの下部にある実際の SQL ステートメントに変換されます。

PreparedStatement ステートメント = connection.prepareStatement(sql);
//setInt メソッドを使用して、SQL ステートメントの最初のワイルドカードを特定の値に置き換えます。statement.setInt(1,id);
//setString メソッドを使用して、SQL ステートメント内の 2 番目のワイルドカードを特定の値に置き換えます。statement.setString(2,name);

JDBC では、Connection とデータベースを使用してconnectionオブジェクトが確立されます。次に、 connection prepareStatement(String sql) メソッドを呼び出して、パラメータ sql で指定された SQL 文をコンパイルおよび前処理し、データベースの基になる内部コマンドを生成し、そのコマンドを PreparedStatement オブジェクトにカプセル化します。

6.3 SQLを実行し、結果セットを処理する

PreparedStatementオブジェクトのexecuteQueryまたはexecuteUpdateメソッドを通じてSQLを実行する

コンテンツの変更操作(追加、変更、削除)を実行する場合は、int executeUpdate() メソッドを使用します。

int ret = ステートメント.executeUpdate();
// executeUpdate は、操作によって影響を受けた行の数を返します // 戻り値を印刷して、影響を受けた行の数を表示できます System.out.println("ret: "+ret);

クエリ操作を実行する場合は、ResultSetのexecuteQuery()メソッドを使用します。

結果セット resultSet=statement.executeQuery();
// executeQuery の戻り結果は、操作の実行後に見つかった一時的なテーブル構造で、ResultSet オブジェクトに格納されます。 // 次に、反復子のトラバースと同様に、次のようにトラバースできます while(resultSet.next()){
    // idとnameの2つの列があると仮定します
    戻り値: resultSet.getInt(id);
    文字列名 = resultSet.getString(name);
    System.out.println("id="+id+", name="+name);
}

SQL クエリ ステートメントは、列 (​​フィールド) 別に編成されたデータ行でResultSet ResultSetオブジェクトを返します。
ResultSet オブジェクトは、一度に 1 行のデータしか見ることができません。次の行のデータに移動するには、next() メソッドを使用します (i++ と同様)。
フィールドを取得するには、 ResultSetオブジェクトのgetXxx()メソッドを使用できます。一般的な方法については後ほど紹介します。

6.4 リソースの解放

SQL ステートメントの実行が完了したら、特定のオブジェクトをもう使用しない場合は、接続を閉じて、対応するリソースを解放する必要があります。

// ResultSet オブジェクトが不要になった場合は、接続を閉じる必要があります resultSet.close();

// 接続が不要になったら、接続を閉じる必要があります connection.close();

// PreparedStatement が不要になったら、接続ステートメントを閉じる必要があります。close();

ResultSetConnectionPreparedStatementなどのオブジェクトはすべて、マシンのハードウェア リソースに対応しており、使用されない場合は時間内に返される必要があります。これは本の貸し借りに似ています。人々が図書館から本を借りるだけで返却しなければ、図書館の本のリソースは減り続けます。これらのオブジェクトは、 close()メソッドを使用して、クライアントとサーバーとの間で確立された接続を閉じ、占有されているリソースを解放できます。

6.5 JDBCプログラミングテンプレート

上記の 5 つの手順に従うことで、基本的な Java JDBC プログラミングを実行できます。方法は複数ありますが、まだやり方がわからない場合は、この方法をマスターしてください。最後に、テンプレート全体をまとめます。これに基づいて、Java 言語を使用して MySQL データベースに対してさまざまな操作を実行できます。

パブリック静的voidテスト(){
    // 1. データベースソースを作成し、接続する
 データソース dataSource=new MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    接続 connection=dataSource.getConnection();

    // 2. 実行する操作を準備するための SQL ステートメントを構築します。String sql="";
    PreparedStatement ステートメント = connection.prepareStatement(sql);

 // 3. SQL を実行し、結果セットを処理します。int ret=statement.executeUpdate();

    // 4. 実行が完了し、リソースを解放します。statement.close();
    接続を閉じます。
}

7. JDBC共通インターフェースとクラス

上記の JDBC プログラミング手順では、次のインターフェースとクラスが導入されており、互いの脆弱性を補完することができます。

7.1 データソースとMysqlDataSource

補充:

上記のコードでは、 MysqlDataSourceを直接使用してデータ ソースを作成することもできるため、下方変換を使用する必要はありません。しかし、DataSource を使用する場合、残りのコードは実際にはDataSource型を使用します。これは、特定のデータベース タイプとは関係のないクラスです。データベースを切り替える必要がある場合、コードを大幅に変更する必要はありません。

7.2 接続

Connectionインターフェース実装クラスはデータベースによって提供されます。通常、 Connectionオブジェクトを取得するには 2 つの方法があります。

方法1: DataSource (データソース) オブジェクトを通じて取得する

// データベース ソースを作成します。DataSource dataSource=new MysqlDataSource();

// データベースの詳細を設定します ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("1234");

// データベース接続を作成します。Connection connection=dataSource.getConnection();

方法2: DriverManager (ドライバー管理クラス)の静的メソッドを通じて取得する

// JDBC ドライバーをロードします Class.forName("com.mysql.cj.jdbc.Driver");

// データベース接続を作成します。Connection connection=DriverManager.getConnection(url);

MySQL データベース ドライバーはDriverクラスにカプセル化されており、そのパッケージ名はcom.mysql.cj.jdbcです。このクラスは、Java ランタイム クラス ライブラリ内のクラスではありません。

上記の 2 つの方法の違い:

  • DriverManagerクラスによって取得されたConnection再利用できません。使用後にリソースを解放すると、物理的な接続はconnection.close()によって閉じられます。
  • DataSource接続プールのサポートを提供します。接続プールは、初期化時に一定数のデータベース接続を作成します。これらの接続は再利用できます。データベース接続が使い果たされるたびに、リソースはconnection.close()を通じて解放されます。つまり、 Connectionオブジェクトがリサイクルされます。

7.3 準備されたステートメント

PreparedStatement 、SQL ステートメントをデータベースに送信できる、JDBC API によって提供される 3 つのオブジェクトの 1 つです。これら3つの簡単な紹介はこちら

  • Statement : パラメータなしで単純なSQLを実行するために使用します
  • PreparedStatement :
  1. パラメータの有無にかかわらずSQL文を実行するために使用します。
  2. SQL文はデータベースシステムでプリコンパイルされている
  3. ステートメントオブジェクトよりも高速に実行されます
  • CallableStatement : データベースのストアドプロシージャへの呼び出しを実行するために使用されます

7.4 結果セット

ResultSetオブジェクトは結果セットと呼ばれ、SQL ステートメントの条件を満たすすべての行を表し、一連の getXxx() メソッドを通じてこれらの行のデータへのアクセスを提供します。
ResultSet 内のデータは行ごとに配置されます。複数のフィールドがある場合は、必ずレコード ポインターが存在します。ポインターが指すデータ行は現在のデータ行と呼ばれます。操作できるのは、現在のデータ行のみです。特定のレコードを取得したい場合は、 ResultSetnext()メソッドを使用する必要があります。このメソッドは、 while ループと組み合わせて、 ResultSet 内のすべてのレコードを走査できます。

共通の ResultSet オブジェクト メソッド:

知らせ:

ResultSet オブジェクトとデータベース接続オブジェクト Connection は密接に接続されています。接続オブジェクトが閉じられると、ResultSet オブジェクト内のデータはすぐに消えます。

8. Java操作データベースインスタンス

8.1 テーブルへのデータの追加

学生テーブルに学生 ID と名前を追加します。

パブリック静的void testInsert()はSQLExceptionをスローします{
    データソース dataSource=新しい MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    接続 connection=dataSource.getConnection();
    スキャナー scanner = new Scanner (System.in);
    System.out.print("IDを入力してください: ");
    int id=スキャナ.nextInt();
    System.out.print("名前を入力してください: ");
    文字列名 = scanner.next();
    文字列 sql="学生の値に挿入(?,?)";
    PreparedStatement ステートメント = connection.prepareStatement(sql);
    ステートメント.setInt(1,id);
    ステートメント.setString(2,名前);
    int ret = ステートメント.executeUpdate();
    System.out.println("ret: "+ret);
    ステートメント.close();
    接続を閉じます。
}

8.2 テーブルからデータを削除する

student という名前のテーブルで、id 条件を満たす student テーブル内のレコードを削除します。

パブリック静的void testDelete()はSQLExceptionをスローします{
    データソース dataSource=新しい MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    接続 connection=dataSource.getConnection();
    スキャナー scanner = new Scanner (System.in);
    System.out.print("削除するIDを入力してください: ");
    int id=スキャナ.nextInt();
    文字列 sql="delete from student where id=?";
    PreparedStatement ステートメント = connection.prepareStatement(sql);
    ステートメント.setInt(1,id);
    int ret = ステートメント.executeUpdate();
    System.out.println("ret: "+ret);
    ステートメント.close();
    接続を閉じます。
}

8.3 テーブル内のデータの変更

student という名前のテーブルで、id 条件を満たす学生の名前を変更します。

パブリック静的void testUpdate()はSQLExceptionをスローします{
    データソース dataSource=新しい MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    接続 connection=dataSource.getConnection();
    スキャナー scanner = new Scanner (System.in);
    System.out.print("変更したい学生IDを入力してください: ");
    int id=スキャナ.nextInt();
    System.out.print("変更したい生徒名を入力してください: ");
    文字列名 = scanner.next();
    文字列 sql="学生セット名を更新します。ID は?";
    PreparedStatement ステートメント = connection.prepareStatement(sql);
    ステートメント.setString(1,名前);
    ステートメント.setInt(2,id);
    int ret = ステートメント.executeUpdate();
    System.out.println("ret: "+ret);
    ステートメント.close();
    接続を閉じます。
}

8.4 テーブル内のデータの検索

student という名前のテーブル内のすべてのデータを検索します。

パブリック静的void testSelect()はSQLExceptionをスローします{
    データソース dataSource=新しい MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    接続 connection=dataSource.getConnection();
    文字列 sql="select * from student";
    PreparedStatement ステートメント = connection.prepareStatement(sql);
    結果セット resultSet=statement.executeQuery();
    while(resultSet.next()){
        戻り値: 結果セットの id を返します。
        文字列名 = resultSet.getString("name");
        System.out.println("id = "+id+", name = "+name);
    }
    結果セットを閉じます。
    ステートメント.close();
    接続を閉じます。
}

これで、MySQL データベースの JDBC プログラミング (Java から MySQL への接続) に関するこの記事は終了です。Java から MySQL への接続に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JDBC を使用して MySQL データベースに接続する Java の詳細な説明
  • JavaはMySQLデータベースのコマンドラインプログラムプロセスに接続します
  • JavaベースのMACシステムIDEAはMYSQLデータベースJDBCプロセスに接続します
  • JavaでMySQLデータベースに接続する5つの方法の詳細な説明
  • Java を使用して MySQL データベースに接続する方法の詳細なチュートリアル (推奨)
  • Java が Mysql データベースに接続する詳細なコード例
  • Java が MySQL データベースに接続するコード例プログラム
  • Java で jdbc を使用して MySQL データベースに接続する例の分析
  • JDBC に基づいて MySQL データベースに接続する Java の詳細な例
  • JavaはMySQLデータベースインスタンスに接続します

<<:  HTMLテキストオーバーフローの2つの一般的な解決策は省略記号を表示することです

>>:  JavaScriptのアンチシェイクとスロットリングとは

推薦する

LED を使って Linux カーネルを使い始める方法を探る

目次序文LEDトリガー探索を始めるLEDデバイス登録LEDディレクトリ類推によって理解するクラスディ...

よくある CSS のヒントと経験談 11 選

1. 画像の下にある数ピクセルの空白を削除するにはどうすればよいですか?コードをコピーコードは次のと...

HTML レイヤード ボックス シャドウ効果のサンプル コード

まず、画像を見てみましょう。今日はこのエフェクトを作成します。 実は、何でもないんです。Web ペー...

uniapp プロジェクトの最適化方法と提案

目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...

純粋な CSS3 で蝶が羽ばたく様子を再現する例

純粋なCSS3で蝶が羽ばたく様子を再現。まずはその効果をご覧ください どうですか?効果はかなりいいで...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...

MYSQLテーブルの包括的な概要

目次1. テーブルを作成する1.1. テーブルを作成するための基本構文1.1.1. シンプルなテーブ...

画面なしで無線ネットワークに接続しているときに Raspberry Pi の IP アドレスを見つける方法

あなたがlinuxerだと仮定すると、 windowserだとは想定しません。Windows ユーザ...

HTMLページ埋め込み動画とJSコントロール切り替え動画例の詳しい説明

まず、ページにビデオを埋め込むための HTML コードは次のとおりです。コードをコピーコードは次のと...

JS 面接の質問: forEach はループから抜け出すことができますか?

この質問をされたとき、私は無知で頭が真っ白になりました。もちろん、正しく答えられませんでした。私はず...

JavaScriptはブラウザがIEかどうかを判定します

フロントエンド開発者としては、IEの落とし穴は避けて通れません。他のブラウザはいいのにIEは壊れてい...

mysql8.x docker リモートアクセスの詳細な設定

目次環境条件エラーが発生しました回避策1. mysql dockerにログインする2. ルートパスワ...

NavicatでMySQLビッグデータをインポートする際のエラーの解決方法

Navicat がエクスポートしたデータはインポートできません。最後に、MySQLコマンドのインポー...

Django プロジェクトを作成して MySQL に接続する方法

1: django-admin.py startproject プロジェクト名2: cd プロジェク...

MySQL の undo、redo、binlog の違いを簡単に分析します

目次序文【ログ取り消し】 【REDOログ】 【バイナリログ】要約する序文MySQL には、REDO ...