fc2ブログ

2012-11-24(Sat)

JDBC Struts DriverManager.getConnectionを使う方法

Strutsを使ってMySQLへアクセスする際、様々な手法がある。
今回は、DriverManagerを使ったアクセス方法をメモっておく。

対象:s2dao1.0.51

処理
シーケンスとしては以下の通り。
ユーザーログイン画面からemail, passwordを入力しDBのデータと一致すれば
セッション登録する。

(1).email, passwordを入力しログインボタン画面からActionクラスへ遷移
(2).ActionクラスではStrutsのアノテーション(@Execute)が示すメソッドへ遷移
(3).ActionクラスのメソッドでDaoをコールしSELECT文を実行。
(4).DBのemail, passwordが一致すればseasarのセッション保持機能を活用する
(5).セッションタイムアウトはweb.xmlで設定。


ソースコード
DAO
@S2Dao(bean=User.class)
public class UserDao {
static private Connection conn;
static private PreparedStatement stmt;
static {
try {
Class. forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jtestdb" , "username" , "password");
stmt = conn .prepareStatement("SELECT email, password FROM USER WHERE email = ? and password = ?");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public User selectByEmail(String email, String password) {
ResultSet rs = null;
User retUser= null;

try {
stmt.setString(1, email);
stmt.setString(2, password);
rs = stmt.executeQuery();

while(rs.next())
{
String r_email = rs.getString( "email");
String r_password = rs.getString( "password");
retUser = new User(
r_email,
r_password
);
break;
}

} catch (SQLException e) {
e.printStackTrace();
}

return retUser;
}

public int insert(String email, String password){
try {
stmt = conn .prepareStatement("INSERT INTO USER (email, password) VALUES (?,?)");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int rs = 0;

try {
stmt.setString(1, email);
stmt.setString(2, password);
rs = stmt.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
}

return rs;
}
// public int update(User user);
// public int delete(User user);
}


selectByEmailのexecuteQuery結果が1件しかないにもかかわらずrs.next()している理由は
これがないと、以下のようなエラーが発生してしまう。
java.sql.SQLException: Before start of result set
S1000


Action
public class LoginAction {
protected Log log = LogFactory.getLog( this.getClass());
private UserDao userDao;
@Resource
@ActionForm
public UserForm userForm;
private UserDto userDto;

public LoginAction(){
this.setUserDao(new UserDao());
}

public void setUserDto(UserDto userDto){
this.userDto = userDto;
}
public UserDto getUserDto(){
return this .userDto ;
}

@Execute(validator = true, input = "/login/index.jsp" )
public String index() {
log.debug("email get start" );
User user = userDao.selectByEmail(userForm .email , userForm.password );

if (null != user){
System. out.println("email: " + user.email);

// セッションへの保存処理
// userDtoに値を入れるだけでSessionに保存される
Beans. copy(this. userForm, this .userDto ).execute();
return "/mypage/?redirect=true" ;
} else{
userDao.insert(userForm .email , userForm .password );
return "/mypage/error.jsp" ;
}
}

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

public UserDao getUserDao() {
return userDao ;
}
}




参考:
 JDBCManagerを使う方法
 Struts と MySQL による Web アプリケーション
関連記事
スポンサーサイト



コメントの投稿

管理者にだけ表示を許可する

コメント

プロフィール

kumagonjp2

Author:kumagonjp2
Python,Django,R,Mongo,MySQL,Struts,Spring,データマイニングなどサーバー関係のメモを残していきます。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
雪が3Dで降るブログパーツ ver2

マウスで見る方向変えられます

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR