JSPでOracleを使った
MVC Model1パターンの活用方法について整理したいと思います。
一番最初にすべきことは、Oracleデータベースのライブラリを
持って来ることです。
Oracleデータベースのライブラリは、
Oracleデータベースのインストールフォルダで見つけることができます
デフォルトのインストールパスは、上記と同じだと思います。
それぞれ合うバージョンのjarファイルをコピーしてください。
Eclipseの場合
このパスにコピー&ペーストだけでも
問題もなくライブラリを参照することができます。
ところでintellij ideaの場合、簡単にはいけません。
このようにライブラリを参照できず、エラーが出るようになります。
直接追加が必要です。
fileのproject structureに入った後
jarファイルを追加を選択して
libフォルダペーストしたファイルを参照します。
このプロセスを完了すると、さっきのエラーがすべて消えます。
準備は終わりました。
コード打ちを説明いたします。
まず、これらのクラスを作成する必要があります。
Memberはモデルクラス
MemberDaoはImpleクラスが実装するインターフェイス
OracleJdbcは、Oracle接続に必要なユーザ名、パスワード、
ホストアイピーに関する設定するためのインタフェースです。
下のjarファイルは、先の作業で追加したファイルです。
member-registerは会員情報を入力するjsp
resultはその情報の確認するjspです。
コンピュータが処理する順番に沿って説明します。
まず、データを入力受けるjspから始めます。
簡単な方法の会員登録ページです。
コードは次の通りです。
<h1>Sign in Form</h1>
<form action="member-reg-result.jsp" method="post">
<input type="text" name="userid" placeholder="ID" required/>
<br/>
<input type="password" name="pwd" placeholder="Password" />
<br/>
<input type="email" name="email" placeholder="Email" required />
<br/>
<input type="submit" value="会員登録" />
<input type="reset" value="取り消し"/>
</form>
form形式を利用しました。
ここで、データを入力し会員登録を押すと
actionで設定したmember-reg-result.jspページに移動します。
下はresult.jspページのコードです。
<body>
<h1>結果ページ</h1>
<%
// Requestパラメータの値を読む
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("userid");
String pw = request.getParameter("pwd");
String email = request.getParameter("email");
// Member オブジェクトを作る
Member m = new Member(id, pw, email);
// DaoのInsert()メソッドを使う
MemberDaoImple dao = MemberDaoImple.getInstance();
int result = dao.insert(m);
if(result == 1){
out.print("<p>"+m.getUserid()+"登録成功</p>");
} else {
out.print("<p>"+m.getUserid()+"登録失敗</p>");
}
%>
</body>
ここで使用したメソッドは、
1. requestをエンコーディングするためのメソッド
2. jspで送信したデータを受け取るためのgetParameterメソッド
3. MemberDaoImpleのシングルトンメソッド
4. シングルトンに基づいて設定したinsertメソッド
この四つです。
下はMemberDaoImpleのコードです。
public class MemberDaoImple implements MemberDao{
// singleton 適用
public static MemberDaoImple instance = null;
private MemberDaoImple(){}
public static MemberDaoImple getInstance(){
if(instance==null){
instance = new MemberDaoImple();
}
return instance;
}
@Override
public int insert(Member m) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
// 1. JDBC Driver loading
try {
DriverManager.registerDriver(new OracleDriver());
// 2. Connection 設定
conn = DriverManager.getConnection(URL, USER, PASSWD);
// 3. Statement 作成
pstmt = conn.prepareStatement(SQL_INSERT);
pstmt.setString(1, m.getUserid());
pstmt.setString(2, m.getPwd());
pstmt.setString(3, m.getEmail());
// 4. 実行
result = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
一番上の行は、アドレスを一元化させるためのシングルトンメソッドです。
insertでは、データベースにアクセスし、データを追加するためのメソッドです。
(単純に作るため、ここでデータベースのログイン、アクセス+保存機能を同時にinsertメソッドに保存した。こいう作り方はよくないです。)
DriveManagerを通してデータベースを登録します。
その後getConnectionを使ってデータベースに接続します。
そしてPreparedStatementを使用してパラメータとして受け取るデータを
データベースに転送する作業をします。
SQL_INSERTの文字列は、このように設定しました。
String SQL_INSERT = "insert into test_member values(?, ?, ?)";
パラメータとして受け取ったid、password、emailを?、?、?の処に分けてデータベースに送信する準備を行っています。
その後executeUpdateメソッドを使って
データベースに転送します。
Oracleデータベースは、データの入力が成功する際に
intの1を返し、失敗の時に0を返します。
あらかじめint型の変数を作ってリターンの結果を格納します。
その後、データベースにアクセスするために開いた
通路を逆の順序で閉じています。
このプロセスは、try catchやthrowを使用しない場合、エラーが出ます。
なのでthrowやtry catchの中一つの処理をしてください。
このプロセスが正常に実行した場合
データベースにアクセスして保存、終了を実行したはずです。
その後、result.jspファイルを浮かびます。
MemberDaoImple dao = MemberDaoImple.getInstance();
int result = dao.insert(m);
if(result == 1){
out.print("<p>"+m.getUserid()+"登録成功</p>");
} else {
out.print("<p>"+m.getUserid()+"登録失敗</p>");
}
オラクルのデータベースが返した値が1(成功)であれば、
登録成功を浮かび、そうではない場合(失敗)登録失敗を浮かびます。
以上で大まかな説明を終わります。
댓글 없음:
댓글 쓰기