データの更新(UPDATE)

広告

次はデータの更新です。

データを取得する時には"executeQuery"メソッドを使いましたが、データの更新や削除、追加の場合にはSQL文を実行した結果として何か受け取るわけではないので別のメソッドを使います。「Statement」インターフェースで用意されている"executeUpdate"メソッドを使います。

指定された SQL 文を実行します。SQL 文は、INSERT 文、UPDATE 文、DELETE 文、
または SQL DDL 文のような何も返さない SQL 文の場合があります。 

パラメータ:
  sql - SQL INSERT 文、UPDATE 文、または DELETE 文、あるいは何も返さない
    SQL 文 
戻り値:
  INSERT 文、UPDATE 文、DELETE 文の場合は行数。何も返さない SQL 文の場合
    は 0 
例外: 
  SQLException - データベースアクセスエラーが発生した場合、または指定さ
    れた SQL 文が ResultSet オブジェクトを生成する場合

引数にはデータベースに送りたいSQL文が書かれた文字列を指定します。"executeUpdate"メソッドを実行した結果、データベースからは処理された行数が帰ってきます。

実際の使い方は次のようになります。

Connection conn = null;

try {
  conn = DriverManager.getConnection(url, user, password);

  Statement stmt = conn.createStatement();
  String sql = "update kabukatable set company='楽天(株)' where code = 4755";
  int num = stmt.executeUpdate(sql);
}catch (SQLException e){
  out.println("SQLException:" + e.getMessage());
}

※データの更新/追加/削除のSQL文の記述方法は『データの追加/更新/削除』を参照して下さい。

サンプルプログラム

では簡単なサンプルプログラムで試してみましょう。

web.xmlファイルは下記のようにしました。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>databasetest</servlet-name>
    <servlet-class>DatabaseTest3</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>databasetest</servlet-name>
    <url-pattern>/databasetest</url-pattern>
  </servlet-mapping>
</web-app>

プログラムは下記の通りです。

DatabaseTest3.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class DatabaseTest3 extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<head>");
    out.println("<title>データベーステスト</title>");
    out.println("</head>");
    out.println("<body>");

    Connection conn = null;
    String url = "jdbc:mysql://localhost/jdbctestdb";
    String user = "testuser";
    String password = "testpass";

    try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      conn = DriverManager.getConnection(url, user, password);

      Statement stmt = conn.createStatement();

      String sql = "update kabukatable set company='楽天(株)' where code = 4755";
      int num = stmt.executeUpdate(sql);

      sql = "select * from kabukatable";
      ResultSet rs = stmt.executeQuery(sql);

      while(rs.next()){
        int code = rs.getInt("code");
        String company = rs.getString("company");
        out.println("<p>");
        out.println("コード:" + code + ", 会社名:" + company);
        out.println("</p>");
      }

      rs.close();
      stmt.close();
    }catch (ClassNotFoundException e){
      out.println("ClassNotFoundException:" + e.getMessage());
    }catch (SQLException e){
      out.println("SQLException:" + e.getMessage());
    }catch (Exception e){
      out.println("Exception:" + e.getMessage());
    }finally{
      try{
        if (conn != null){
          conn.close();
        }
      }catch (SQLException e){
        out.println("SQLException:" + e.getMessage());
      }
    }

    out.println("</body>");
    out.println("</html>");
  }
}

上記をコンパイル後に「d:¥servlet-sample¥database¥WEB-INF¥classes¥」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/database/databasetest」へアクセスしてみます。

データの更新

今回はコードが4755の行の会社名を変更し、その後全データを取り出して表示しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)