728x90
반응형
list
public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(7);
		list.add(3);
		list.add(2);
		list.add(3);
		System.out.println("toString() 오버라이딩 : "+list);
		
        // for문
		for(int i=0;i<list.size();i++) {
			System.out.print(list.get(i));
		}
		System.out.println("");
		
		// foreach문
		for(Integer n :list) {
			System.out.print(n);
		}
		
	}

 

  • 입력된 값이 순차적으로 들어간다 -> index를 가지기 때문에 for 사용가능
  •  For, foreach 모두 사용 가능하다.
  • System.out.println(list); 형식으로 출력하면 toString()메서드가 오버라이딩 되어있는 것을 알 수 있다.
  • 중복된 값이 들어가도 누락되지 않고 들어간다.

 

 

 

 

 

set
public static void main(String[] args) {
		Set<Integer> set = new HashSet<>();
		set.add(1);
		set.add(7);
		set.add(3);
		set.add(2);
		set.add(3);
		System.out.println("toString 오버라이딩 : "+set);
		
		for(int i=0;i<set.size(); i++) {
			// set은 순서(인덱스)가 없기 때문에 이런식 출력 불가
		}
		
        // foreach문은 가능
		for(Integer n : set) {
			System.out.print(n);
		}

	}

 

  • 입력된 값의 순서가 보장되지 않는다.
  • 순서(인덱스)가 없기 때문에 for를 사용할 수 없다. (foreach는 가능)
  • toString()메서드가 오버라이딩 되어있다.
  • 중복을 허용하지 않기 때문에 중복된 값을 넣으려고 할 경우 무시한다.

 

728x90
반응형
728x90
반응형

* 부트스트랩 연동 코드가 존재하면 아래 사진처럼 나옵니다*

 

index.jsp

	<!-- 상품 목록 출력 -->
      <%
      // 페이지
      int currentPage = 1;
      if(request.getParameter("currentPage")!=null){
         currentPage = Integer.parseInt(request.getParameter("currentPage"));
      }
      System.out.println(currentPage+" <--selectEbookList currentPage");
      
      final int ROW_PER_PAGE = 10; // 페이지에 보일 주문 개수
      int beginRow = (currentPage-1)*ROW_PER_PAGE; // 리스트 목록 시작 부분
      
      // 전체 목록
      EbookDao ebookDao = new EbookDao();
      // 화면에 보일 리스트를 추출해오는 함수(리스트 시작 부분, 받아올 리스트 개수)
      ArrayList<Ebook> ebookList = ebookDao.selectEbookList(beginRow, ROW_PER_PAGE);
      %>
      
      <h2>전체 상품 목록</h2>
   <!-- 상품 목록 출력 -->
   <table class="table" border="1">
      <tr>
         <%
            int i = 0;
         
            // 반복을 통해 카테고리 목록을 표로 출력
            for(Ebook e : ebookList){
         %>
               <td>
                  <div><a href=""><img src="<%=request.getContextPath() %>/image/<%=e.getEbookImg() %>" width="200" height="200"></a></div>
                  <div><a href=""><%=e.getEbookTitle()  %></a></div>
                  <div>₩ <%=e.getEbookPrice() %></div>
               </td>
         <%
               i+=1; // for문 끝날때마다 i는 1씩 증가
               if(i%5==0){
         %>
                  </tr><tr> <!-- 줄바꿈 -->
         <%
               }
            }
         %>
      </tr>
   </table>
   
   <div></div>
   
   <!-- 페이지 -->
   <%	
   	   // 페이징을 위해 구해야 할 마지막 페이지 연산
       int lastPage;
   	   int currentnumPage=0; // 현재 페이지가 몇번째 묶음인지(이전,다음 구현을 위함)
   	   int lastnumPage=0; // 마지막 페이지가 몇번째 묶음인지(마지막 페이지에서 다음이 나오지 않도록 하기 위함)
   	   
   	   lastPage = ebookDao.selectEbookListLastPage(ROW_PER_PAGE); // 상품의 개수를 통해 마지막 페이지가 몇번인지 추출
	   
   %>
    <ul class="pagination body-back-color">
    <%
    	if(currentPage!=1){
    %>
    		<li class="page-item"><a class="page-link" href="<%=request.getContextPath() %>/index.jsp?currentPage=<%=1 %>">처음</a></li>
    <%	
    	}
    	if(currentPage%ROW_PER_PAGE==0){ // 현재 페이지가 몇번째 묶음인지
    		currentnumPage =(currentPage/ROW_PER_PAGE)-1;
    	} else{
    		currentnumPage = currentPage/ROW_PER_PAGE;
    	}
   	%>
    <%
    	if((currentnumPage)>0){ // 이전
    %>
    		<li class="page-item"><a class="page-link" href="<%=request.getContextPath() %>/index.jsp?currentPage=<%=ROW_PER_PAGE*(currentnumPage-1)+1 %>">이전</a></li>
    <%
    	}
    
    	for(int i=0;i<ROW_PER_PAGE;i++){ // 중간 번호들
    		if(lastPage>=(ROW_PER_PAGE*currentnumPage)+i+1){
   	    %>
   		  <li class="page-item"><a class="page-link" href="<%=request.getContextPath() %>/index.jsp?currentPage=<%=(ROW_PER_PAGE*currentnumPage)+i+1 %>"><%=(ROW_PER_PAGE*currentnumPage)+i+1 %></a></li>
   	   <%
    		}
    	}
    	if(lastPage%ROW_PER_PAGE==0){ // 마지막 페이지가 몇번째 묶음인지
    		lastnumPage =(lastPage/ROW_PER_PAGE)-1;
    	} else{
    		lastnumPage = lastPage/ROW_PER_PAGE;
    	}
    	
    	if(lastnumPage>currentnumPage){
    %>
    		<li class="page-item"><a class="page-link" href="<%=request.getContextPath() %>/index.jsp?currentPage=<%=ROW_PER_PAGE*(currentnumPage+1)+1 %>">다음</a></li>
    <%
    	}
    	if(currentPage!=lastPage && lastPage!=0){
    %>
    		<li class="page-item"><a class="page-link" href="<%=request.getContextPath() %>/index.jsp?currentPage=<%=lastPage %>">맨끝</a></li>
    <%
    	}
    %>
	</ul>

- currentPage(현재페이지), beginRow(리스트 시작 위치), ROW_PER_PAGE(화면에 보일 리스트 개수 및 하단 페이징 단위), lastPage(마지막 페이지), currentNumPage(현재 페이지가 위치한 묶음 단위<이전, 다음을 위함>), lastnumPage(마지막 페이지가 위치한 묶음 단위<다음 버튼의 오류 방지>)

 

- 각 변수들의 사용 목적을 숙지하면 코드를 이해하기 좋습니다.

 

 

 

EbookDao.java

// [관리자 & 고객] 전자책 목록 전체 출력
   public ArrayList<Ebook> selectEbookList(int beginRow, int rowPerPage) throws ClassNotFoundException, SQLException{
      ArrayList<Ebook> list = new ArrayList<>();
      
      // mariaDB 연동
      Class.forName("org.mariadb.jdbc.Driver");
	Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.01:3307/shop", "root", "java1004");
      String sql = "select ebook_no ebookNo, category_name categoryName, ebook_title ebookTitle, ebook_img ebookImg, ebook_price ebookPrice, ebook_state ebookState from ebook order by create_date desc limit ?,?";
      PreparedStatement stmt = conn.prepareStatement(sql);
      stmt.setInt(1, beginRow);
      stmt.setInt(2, rowPerPage);
      System.out.println("ebook 목록 출력 stmt : "+stmt);
      ResultSet rs = stmt.executeQuery();
      
      // 각 전자책의 정보를 리스트에 담는다
      while(rs.next()) {
         Ebook ebook = new Ebook();
         ebook.setEbookNo(Integer.parseInt(rs.getString("ebookNo")));
         ebook.setCategoryName(rs.getString("categoryName"));
         ebook.setEbookTitle(rs.getString("ebookTitle"));
         ebook.setEbookImg(rs.getString("ebookImg"));
         ebook.setEbookPrice(rs.getInt("ebookPrice"));
         ebook.setEbookState(rs.getString("ebookState"));
         list.add(ebook);
      }
      rs.close();
      stmt.close();
      conn.close();
      return list;
   }
   
   
   // [관리자] 전자책 마지막 페이지 연산
   public int selectEbookListLastPage(int rowPerPage) throws ClassNotFoundException, SQLException {
      DBUtil dbUtil = new DBUtil();
       Connection conn = dbUtil.getConnection();
    
      // 전체 페이지수 구하기
       PreparedStatement stmt;
         String sql = "select count(*) from ebook";
        stmt = conn.prepareStatement(sql);
        System.out.println("전체 전자책 수 stmt : "+stmt);
      ResultSet rs = stmt.executeQuery();
      rs.next();
      int totalData = rs.getInt("count(*)");
      int lastPage= totalData/rowPerPage; // 마지막 페이지 번호
      if(totalData%rowPerPage!=0){
         lastPage +=1;
      }
      
      rs.close();
      stmt.close();
      conn.close();
      
      return lastPage;
   }

[전자책 목록 전체 출력]

- 전자책 목록을 mariaDB에서 받아온 후, ArrayList에 담는 메서드 입니다. 쿼리에서 중요한 부분은 limit입니다.

 

- limit ?,? => 첫번째 물음표에 테이블에서 추출할 리스트의 시작부분을 넣고, 두번째 물음표에 시작부분 부터 몇개의 리스트를 추출할 것인지를 넣는 것 입니다.

 

 

[마지막 페이지 연산]

- 추출할 요소의 수를 받아온 후 rowPerPage를 통해 마지막 페이지가 몇인지 구합니다.

 

 

728x90
반응형
728x90
반응형

1. 도구 -> 데이터베이스를 SQL로 내보내기를 누른다.

 

 

 

 

 

2. 원하는 데이터베이스와 테이블을 선택하고 각종 설정을 마친 후 내보내기를 누른다.

- 데이터베이스와 테이블의 삭제를 체크하면 생성도 자동으로 체크되는데, 이미 존재한다면 삭제하고 다시 생성한다는 것이다.

- 데이터는 DELETE + INSERT로 설정하여 저장하면 데이터가 삽입된 채로 저장되고, 데이터없음으로 저장하면 테이블만 저장된다.

- 파일명은 ???.sql로 설정하고 내보내기를 누르면 된다.

 

 

 

 

 

 

3. sql 형태로 저장된 파일을 잘 보관한다.

 

 

 

 

728x90
반응형

'Web > DB' 카테고리의 다른 글

DB에 값 자동으로 넣기 / Mockaroo , mariaDB  (0) 2021.08.27
HeidiSQL 사용하기 / mariaDB  (1) 2021.08.25
728x90
반응형

1. 깃허브 로그인 후 프로젝트를 저장할 레파지토리를 생성한다.

new 버튼 클릭

 

레파지토리 이름을 작성해주시고 공개여부는 원하는대로 public이나 private를 설정해줍니다. 그리고 생성하시면 됩니다. 요즘은 private도 무료라고 합니다만.. 저는 public으로 했습니다.

 

 

 

 

 

 

2. 깃에 올릴 파일 우클릭 -> Team -> Share Project 클릭

 

 

 

 

 

 

3. Create를 누르고 원하는 위치 선택 후 Finish 클릭

 

모양이 이렇게 변경될겁니다.

 

 

 

 

 

 

 

 

4. 깃허브에 만들어놨던 레파지토리의 <>Code에 들어가서 해당 링크를 복사한다.

복사해둔 상태가 필요한겁니다. 오른쪽 복사 버튼을 직접 누르시는게 더 안전한것같습니다.

 

 

 

 

 

 

 

5. 변경된 프로젝트 우클릭 -> Team -> Commit클릭 후 Unstaged Changes에 있는 모든 것을 Staged Changes로 넘기고 Commit and Push를 클릭한다.

오른쪽 큰 메모장 같은 곳에는 commit 기록을 남겨주시면 됩니다. 이게 어떤 커밋인지...ㅎㅎ

 

 

이렇게 빈 화면이 나온다면 4번 작업을 놓치신겁니다. 여기가 자동으로 채워져야합니다. 자동으로 채워졌다면 Preview를 누르세요.

 

 

 

 

 

 

 

6. 로그인 화면이 나오면 User에는 깃허브 아이디, Password에는 토큰을 넣는다.

 

깃허브 토큰 생성 방법은 인터넷에 쳐보면 또 나올겁니다. 자동 로그인 원하시면 Store in Secure Store 체크해주세요.

 

비밀번호 잊었을때 사용할 질문같은거 설정 간단하게 하시면 되고, push가 정상적으로 되었는지 확인합니다.

 

 

 

 

 

 

7. 정상적으로 Push된 것을 확인할 수 있습니다.

728x90
반응형
728x90
반응형
생성자 메서드
public class Wow {
	
	public Wow() {
	}
	
}

 

- 생성자 메서드는 클래스 명과 동일한 이름을 가지고있습니다.

- 만약 코드에 생성자 메서드가 없다면 디폴트생성자가 컴파일시 자동으로 생성합니다.

 

Wow wow = new Wow( ); 와 같은 객체 생성 코드를 본적이 있으실겁니다.

new는 객체를 만드는 연산자이며, Wow( ) 생성자 메서드를 사용하여 객체를 생성하는 것 입니다.

 

 

 

 

 

일반 메서드
public class Wow {
	
    // 입력 X, 리턴 X
	public void hello() {
		System.out.println("hello");
	}
	
    // 입력 O, 리턴 X
	public void print(String str) {
		System.out.println(str);
	}
    
    // 입력 X, 리턴 O
    public int year(){
    	return 365;
    }
    
	
    // 입력 O, 리턴 O
	public int add(int x, int y) {
		return x+y;
	}	
}

- 일반메서드는 입력값과 리턴값의 유무로 4가지의 형태가 존재합니다.

- 코드의 public 다음위치에는 리턴값의 자료형이 나오고, 리턴값이 없다면 void로 선언하시면 됩니다.

- 입력값이 있는 경우에는 메서드명 다음에 괄호를 열고 넣어주시면 됩니다.

 

public class Wow {
	public static void main(String[] args) {
		Wow wow = new Wow(); // 생성자 메서드
		wow.hello();
		wow.print("fjdkslvn의 블로그");
		System.out.println(wow.year());
		System.out.println(wow.add(1, 2));
	}
}

- 생성자 메서드를 사용하여 객체를 생성합니다.

- 생성된 객체로 메서드를 사용합니다.

- 리턴값이 없는 메서드는 단독으로 사용하고, 리턴값이 있는 함수는 변수처럼 활용 가능합니다.

 

 

결과

 

728x90
반응형
728x90
반응형
정보은닉과 캡슐화

 

 

package vo;

public class Member {
	// 정보은닉
	private String memberId;
	private String memberPw;
	private String memberName;
	private int memberAge;
	private String memberGender;
	private String memberDate;
	
	// 캡슐화(값을 불러오는 함수)
	public String getMemberId() {
		return memberId;
	}
	// 캡슐화(값을 변경하는 함수)
	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}
	public String getMemberPw() {
		return memberPw;
	}
	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	public int getMemberAge() {
		return memberAge;
	}
	public void setMemberAge(int memberAge) {
		this.memberAge = memberAge;
	}
	public String getMemberGender() {
		return memberGender;
	}
	public void setMemberGender(String memberGender) {
		this.memberGender = memberGender;
	}
	public String getMemberDate() {
		return memberDate;
	}
	public void setMemberDate(String memberDate) {
		this.memberDate = memberDate;
	}
	
	
}

 

public: 프로젝트 안에서 원활하게 사용 가능하다.

private: 자신이 포함된 클래스에서만 직접 접근이 가능하고, 프로젝트 안에서 해당 클래스를 제외한 다른 위치에서 불러올 시 정보은닉으로 인해 값에 직접 접근할 수 없다.

 

public은 변수값에 곧바로 접근할 수 있지만, private는 정보은닉된 변수이기 때문에 캡슐화된 메서드를 사용하지 않고는 접근할 수 없다.

 

그래서 getter, setter 메서드를 사용하여 변수값을 가져오거나 변수에 값을 넣을 수 있도록 한다.

 

 

 

 

 

 

 

이클립스에서 getter, setter 자동 생성

 

1. 여백에서 우클릭 -> Source -> Generate Getters and Setters

 

 

 

 

 

2. Select All( or 원하는 변수만 선택) -> Generate

 

 

 

 

 

3. 설정 완료

728x90
반응형

+ Recent posts