[Web] サーブレットで更新
- 2011-01-13 Thu 12:26:49
- JDBC
これまで、Eclipse上でJDBCを利用してデータベースにアクセスしてきましたが、ここからはWebアプリケーション上でJDBCを利用してデータベースにアクセスします。
JavaアプリもWebアプリもJDBCの利用方法は基本的には同じなので、リラックスして勉強していきましょう。
今回は、サーブレットからデータベースの更新作業をやってみます。
データベース(ACCOUNTテーブル)の初期状態

まず、「WEB-INF/src」の下に[dbweb]フォルダを作成します。

このフォルダの中に「DBWebUpdate1.java」および「DBWebUpdate2.java」を作成します。「DBWebUpdate1.java」は、Statementを利用して更新作業を行うサーブレットです。他方、「DBWebUpdate2.java」は、PreparedStatementを利用して更新作業を行います。それぞれのファイルに対応するJavaアプリケーションは「DBUpdate2.java」および「DBUpdate3.java」です(参考)。

今回はブラウザで表示しますので、web.xmlの設定を行いましょう。
<servlet-mapping>
<servlet-name>DBWebUpdate1</servlet-name>
<url-pattern>/DBWebUpdate1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DBWebUpdate2</servlet-name>
<servlet-class>dbweb.DBWebUpdate2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DBWebUpdate2</servlet-name>
<url-pattern>/DBWebUpdate2</url-pattern>
</servlet-mapping>
上のソースを
Statementを使ったソース
package dbweb;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dbjava.DBManager;
public class DBWebUpdate1 extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/plain; charset=Windows-31J");
PrintWriter out=response.getWriter();
Connection con=null;
Statement smt=null;
try{
String name="'太郎'";
int money=3000;
String sql="update account set money="+money+" where name="+name;
con=DBManager.testConnection();
smt=con.createStatement();
smt.executeUpdate(sql);
out.println("名前が"+name+"の残高を"+money+"に更新しました。");
smt.close();
con.close();
}catch(SQLException e){
out.println("更新作業に失敗しました。");
}finally{
if(smt !=null){
try{
smt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(con !=null){
try{
con.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
サーブレットなので、インポートが増えました。出力のためにPrintWriterをインポートしたり、javax.servlet.関係のインポートが必要です。データベース接続用のDBManagerもパッケージが異なるのでインポートが必要です。
更新作業が成功したら
と表示され、失敗したら名前が'太郎'の残高を3000に更新しました。
と表示されます。更新作業に失敗しました。
PreparedStatementを使ったソース
package dbweb;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dbjava.DBManager;
public class DBWebUpdate2 extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/plain; charset=Windows-31J");
PrintWriter out=response.getWriter();
Connection con=null;
PreparedStatement ps=null;
try{
String name="太郎";
int money=5000;
String sql="update account set money=? where name=?";
con=DBManager.testConnection();
ps=con.prepareStatement(sql);
ps.setInt(1, money);
ps.setString(2, name);
ps.executeUpdate();
out.println("名前が「"+name+"」の残高を"+money+"に更新しました。");
ps.close();
con.close();
}catch(SQLException e){
out.println("更新作業ができませんでした。");
}finally{
if(ps !=null){
try{
ps.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(con !=null){
try{
con.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
このソースも、新たにコメントが必要な部分はありません。
更新作業が成功したら
と表示され、失敗したら名前が'太郎'の残高を5000に更新しました。
と表示されます。更新作業に失敗しました。
スポンサーサイト
タグ :
Comments: