JDBC実習


ファイル構造


📁jdbcexam
|_ 📁kr.or.connect.jdbcexam
  • App.java
  • JDBCExam1.JAva->存在主関数
  • |_ 📁kr.or.connect.jdbcexam.dao
  • RoleDao.java
  • |_ 📁kr.or.connect.jdbcexam.dto
  • Role.java
  • Role.java


    ロールオブジェクトに関する情報を含める
    package kr.or.connect.jdbcexam.dto;
    
    public class Role {
    	private Integer roleId;
    	private String description;
    	
    	public Role(Integer roleId, String description) {
    		super();
    		this.roleId=roleId;
    		this.description=description;
    	}
    	
    	public Integer getRoleId() {
    		return roleId;
    	}
    	public void setRoleId(Integer roleId) {
    		this.roleId = roleId;
    	}
    	public String getDescription() {
    		return description;
    	}
    	public void setDescription(String description) {
    		this.description = description;
    	}
    	
    	@Override
    	public String toString() {
    		return "Role [roleId=" + roleId + ", description=" + description + "]";
    	}
    }
    

    RoleDao.java


    データベースへの接続を担当
    次の関数を定義して、DBを読み取り、書き込み、または変更できます.
  • getRole(以下のソースコードではこの例のみを記述する)
  • getRoles
  • addRole (==insert)
  • deleteRole
  • updateRole
  • 大まかな実施プロセス
    1.connオブジェクトの作成
    2.宣言に必要な値を動的に入力するためのprepare Statement変数の作成
    3.prepare Statement変数に保存されているクエリーを実行し、next()関数として行単位でインポート
    4.rsがアイドル時処理異常->close
    5.psがアイドル時処理異常->close
    6.connがnullの場合の例外処理->close
    package kr.or.connect.jdbcexam.dao;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import kr.or.connect.jdbcexam.dto.Role;
    
    public class RoleDao {
    	private static String dburl = "jdbc:mysql://localhost:3306/connectdb";
    	private static String dbUser = "connectuser";
    	private static String dbpasswd = "connect123!@#";
    	
    	public Role getRole(Integer roleId) {
    		Role role = null;
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    			conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
    			// preparedStatement가 가지고 있는 물음표에 대한 값을 지정 가능
    			String sql = "SELECT description, role_id FROM role WHERE role_id = ?";
    			ps = conn.prepareStatement(sql); // sql문을 실행시키도록 함
    			ps.setInt(1, roleId);//1번째 물음표에 roleId 변수를 적용
    			rs = ps.executeQuery();
    			
    			if(rs.next()) {
    				String description = rs.getString(1); // 첫번째 column의 값 가져옴
    				int id = rs.getInt(2); //column이 가진 값 가져옴
    				role = new Role(id, description);
    			}
    		}catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			if(rs != null) { // rs가 null일 때는 수행되지 않도록 함
    				try {
    					rs.close();
    				} catch (SQLException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    			if(ps != null) { // ps가 null일 때는 수행되지 않도록 함
    				try {
    					ps.close();
    				} catch (SQLException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    			if(conn != null) { // conn가 null일 때는 수행되지 않도록 함
    				try {
    					conn.close();
    				} catch (SQLException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    			
    		}
    		
    		return role;
    	}
    }
    

    JDBCExam1.java


    RoleDaoのget関数を使用してDBデータのマスタークラスをインポート
    package kr.or.connect.jdbcexam;
    
    import kr.or.connect.jdbcexam.dao.RoleDao;
    import kr.or.connect.jdbcexam.dto.Role;
    
    public class JDBCExam1 {
    	public static void main(String[] args) {
    		RoleDao dao = new RoleDao();
    		Role role = dao.getRole(100); #role_id 가 100인 레코드를 가져옴
    		System.out.println(role);
    	}
    }
    

    結果