第8章 JDBCの使い方
JDBCとはJava Database Connectivityの略で、Javaアプリケーションからデータベースを操作するAPIのことです。
homepage
# **JDBCの使い方** *** ## **1.JDBCの構成** JDBC APIのパッケージとクラス群 パッケージ + java.sqlパッケージ(Java標準API) クラス + java.sql.DriverManager + java.sql.SQLException インターフェース + java.sql.Connection; + java.sql.DriverManager; + java.sql.ResultSet; + java.sql.SQLException; + java.sql.Statement; <!--graph8-1.png --> <img src="https://i.loli.net/2019/04/25/5cc14f17191ec.png" width="40%"> <br> ## **2.データベースへの接続と切断** EclipseでJDBCのライブラリをしたら、Connectionクラスのインスタンスを作って保存すると、java.sql.Connectionクラスが自動的にimportされます。 データベースを操作するに使う全ての機能(クラス、メソッド)がConnectionクラスに入っています。 <!--graph8-2.png --> <img src="https://i.loli.net/2019/04/25/5cc12f9ec6085.png" width="40%"> データベースの接続はDriverManagerクラスを利用します。 <!--graph8-3.png --> <a href="https://i.loli.net/2019/04/25/5cc137c414590.png" target="_blank"> <img src="https://i.loli.net/2019/04/25/5cc137c414590.png" width="40%"></a> <br> ## **3.データの取得** SQL文を発行して結果を表示するには次の手順を行います。 + データベースへ問い合わせを実行する + データベースからの結果を取得する + リソースを開放する <!--graph8-4.png --> <a href="https://i.loli.net/2019/04/25/5cc1422c10e9c.png" target="_blank"> <img src="https://i.loli.net/2019/04/25/5cc1422c10e9c.png" width="40%"></a> <br> ### **・ResultSet** ResultSetクラスは、問い合わせにより返されるデータを受け取ります。 結果から列(カラム) を取得するために、以下のようなメソッドを提供する。なお、列を取得するメソッドは、type getType(int | String)の 形式をとる。ここで、引数には、取得したい列の番号か、列名を 指定する。 ResultSetクラスのメソッド <table border="1"> <tr style="width:600px ;background-color:#C6E0B4 ;text-align:center;"> <th align="center">メソッド</th> <th align="center">機能</th> </tr> <tr> <td>boolean first()</td> <td>現在の参照行を先頭に移動</td> </tr> <tr> <td>boolean next()</td> <td>現在の参照行を1行下に移動</td> </tr> <tr> <td>boolean previous()</td> <td>現在の参照行を1行上に移動</td> </tr> <tr> <td>boolean last()</td> <td>現在の参照行を最終行に移動</td> </tr> <tr> <td>String getString(String columnName)</td> <td>現在行から列名に指定した列の値を取得</td> </tr> <tr> <td>int getInt(String columnName)</td> <td>現在行から列名に指定した列の値を取得</td> </tr> <tr> <td>double getDouble(String columnName)</td> <td>現在行から列名に指定した列の値を取得</td> </tr> <tr> <td>boolean getBoolean(String columnName)</td> <td>現在行から列名に指定した列の値を取得</td> </tr> <tr> <td>Date getDate(String columnName)</td> <td>現在行から列名に指定した列の値を取得</td> </tr> </table> </br> ### **・prepareStatement** PreparedStatementはデータベースに対するSQL文を実行するために使われます。 PreparedStatementの作成 ``` //SQL文の用意 String selectStatement = "SELECT * from empinfo where empCd = ?"; //PreparedStatementのインスタンスを作成 PreparedStatement prepStmt = con.prepareStatement(selectStatement); //用意されたSQL文中の?に値を代入します。ここでは左から第1番目の?に”100011”を代入します。複数個?を設定することもできます。 prepStmt.setString(1,"100011"); //SQL文実行 ResultSet rs = prepStmt.executeQuery(); ``` パラメータに値を設定するには設定する値のデータ型毎に別々のメソッドが用意されています。 <table border="1"> <tr style="width:600px ;background-color:#C6E0B4 ;text-align:center;"> <th align="center">メソッド</th> <th align="center">説明</th> </tr> <tr> <td>void setString(int parameterIndex, String x)</td> <td>String 値に設定します。</td> </tr> <tr> <td>void setInt(int parameterIndex, int x)</td> <td>int 値に設定します。</td> </tr> <tr> <td>void setLong(int parameterIndex, long x)</td> <td>long 値に設定します。</td> </tr> <tr> <td>void setByte(int parameterIndex, byte x)</td> <td>バイト配列に設定します。</td> </tr> <tr> <td>void setFloat(int parameterIndex, float x)</td> <td>float 値に設定します。</td> </tr> <tr> <td>void setDouble(int parameterIndex, double x)</td> <td>double 値に設定します。</td> </tr> <tr> <td>void setDate(int parameterIndex, Date x)</td> <td>java.sql.Date 値に設定します。</td> </tr> <tr> <td>void setTime(int parameterIndex, Time x)</td> <td>java.sql.Time 値に設定します。</td> </tr> <tr> <td>void setBoolean(int parameterIndex, boolean x)</td> <td>boolean 値に設定します。</td> </tr> <tr> <td>void setTimestamp(int parameterIndex, Timestamp x)</td> <td>java.sql.Timestamp 値に設定します。</td> </tr> </table> <br> ### **・SQL文を実行** 「PreparedStatement」インターフェースにはSELECTなどのクエリーの結果を取得する場合に使う「executeQuery」メソッドと、INSERTやUPDATEなどの結果が返されない場合に使う「executeUpdate」メソッドがあります。 <br> ## **4.データの変更、削除** <!--graph8-5.png --> <a href="https://i.loli.net/2019/04/25/5cc1558a68e60.png" target="_blank"> <img src="https://i.loli.net/2019/04/25/5cc1558a68e60.png" width="40%"></a> <br> **テーブル削除の実例** ``` String dropStatement = "DROP TABLE empinfo"; PreparedStatement prepStmt = con.prepareStatement(dropStatement); ResultSet rs = prepStmt.executeUpdate(); ``` *** >**練習** >>**問題**[JEx8_1.java] empinfo中の "山田もも" を "花村もも" に変更するプログラムを作成してください。 >>**答え** ``` public static void main(String[] args) { Connection con = null; String user = "root"; String password = "root"; String url = "jdbc:mysql://localhost:3306/companydata?serverTimezone=JST"; try { con = DriverManager.getConnection(url, user, password); String update = "UPDATE empinfo SET name = \"花村もも\" WHERE empCd = \"100011\""; PreparedStatement prepStmt1 = con.prepareStatement(update); prepStmt1.executeUpdate(); prepStmt1.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } ```
content
戻る