fc2ブログ

[Web] サーブレットで更新

  • Posted by: servletmania
  • 2011-01-13 Thu 12:26:49
  • JDBC




これまで、Eclipse上でJDBCを利用してデータベースにアクセスしてきましたが、ここからはWebアプリケーション上でJDBCを利用してデータベースにアクセスします。

JavaアプリもWebアプリもJDBCの利用方法は基本的には同じなので、リラックスして勉強していきましょう。

今回は、サーブレットからデータベースの更新作業をやってみます。

データベース(ACCOUNTテーブル)の初期状態

DBUpdate2_3

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

dbweb1

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

dbweb2

今回はブラウザで表示しますので、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に更新しました。

と表示され、失敗したら

更新作業に失敗しました。

と表示されます。
スポンサーサイト



タグ :

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://servletmania.blog137.fc2.com/tb.php/41-c43ed21e
月別アーカイブ
カテゴリ
リンク
RSSリンクの表示
QRコード
QR