import jp.co.itboost.scheduler.common.DAOTemplate;
import java.sql.*;
import java.util.LinkedHashMap;
/**
* User用DAOクラス
* @author ITBoost
*/
public class UserDAO extends DAOTemplate {
/**
* テーブル名
*/
private final static String USER_TABLE_NAME = "schedule_user";
/**
* DAOで管理するデータベースのデータソース名を返す
* @return データソース名
*/
public String getDataSourceName() {
return "jdbc/strutsdev";
}
/**
* 指定されたsqlを元にUserオブジェクトを生成する
* @param sql 任意のSQL
* @return Userオブジェクト
*/
private User getUser(String sql) {
Connection con = null;
try {
con = createConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if (!rs.next()) return null;
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setMailAddress(rs.getString("mailaddress"));
return user;
} catch (SQLException ex) {
System.out.println("in UserDAO:SQLException! sql=" + sql);
ex.printStackTrace();
} finally {
closeConnection(con);
}
return null;
}
/**
* ユーザ情報をデータベースからロードする
* @param id ユーザID
* @return Userオブジェクト
*/
public User load(int id) {
String sql =
"select id, name,password,mailaddress from "
+ USER_TABLE_NAME
+ " where id="
+ id;
return getUser(sql);
}
/**
* ユーザ情報をデータベースに新規保存する
* @param user Userオブジェクト
*/
public void create(User user) {
String sql =
"insert into "
+ USER_TABLE_NAME
+ " (id, name,password,mailaddress) values(?,?,?,?)";
Connection con = null;
try {
con = createConnection();
con.setAutoCommit(false);
int id = getNextId(con, USER_TABLE_NAME);
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setInt(1, id);
stmt.setString(2, user.getName());
stmt.setString(3, user.getPassword());
stmt.setString(4, user.getMailAddress());
stmt.executeUpdate();
con.commit();
} catch (SQLException ex) {
System.out.println("in UserDAO:SQLException! sql=" + sql);
ex.printStackTrace();
} finally {
closeConnection(con);
}
}
/**
* データベースのユーザ情報を更新する
* @param user Userオブジェクト
*/
public void store(User user) {
String sql =
"update "
+ USER_TABLE_NAME
+ " set name=?, password=? ,mailaddress=? where id=?";
Connection con = null;
try {
con = createConnection();
int id = user.getId();
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, user.getName());
stmt.setString(2, user.getPassword());
stmt.setString(3, user.getMailAddress());
stmt.setInt(4, id);
stmt.executeUpdate();
} catch (SQLException ex) {
System.out.println("in UserDAO:SQLException! sql=" + sql);
ex.printStackTrace();
} finally {
closeConnection(con);
}
}
/**
* ユーザIDとパスワードを指定して合致するユーザ情報を取り出す
* @param id ユーザID
* @param password パスワード
* @return Userオブジェクト
*/
public User findByIdAndPassword(int id, String password) {
String sql =
"select id,name,password,mailaddress from "
+ USER_TABLE_NAME
+ " where id="+id+" and password='"+escapeSQL(password)+"'";
return getUser(sql);
}
/**
* ユーザIDと名前の一覧を取り出す
* @return keyに名前, valueにユーザIDが入ったLinkedHashMapオブジェクト
*/
public LinkedHashMap findAllIdAndName() {
String sql = "select id, name from "+USER_TABLE_NAME+" order by id";
Connection con = null;
LinkedHashMap ret = new LinkedHashMap();
try {
con = createConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
ret.put(rs.getString("name"), new Integer(rs.getInt("id")));
}
} catch (SQLException ex) {
System.out.println("in UserDAO:SQLException! sql=" + sql);
ex.printStackTrace();
} finally {
closeConnection(con);
}
return ret;
}
}