스크롤바가 적용이 안되는 이유

 

 

[나의 잘못된 코드]

<StackPanel>
	  <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
      <Grid>
      </Grid>
</StackPanel>

이런식으로 되어있었다.

(chat gpt가 알려줌. ;;)

 

 

 

 

1. 원인 <StackPanel>

<StackPanel> 에서는 ScrollViewr를 사용할 수 없다!

그래서 나는 그냥 안되는 줄알았는데, 

Grid에 Height="" 를 넣어주면 바로 적용된다.. ㅜ.ㅜ!!!

 

아래 사이트에서는 최대 사이즈 MAX를 설정해 줘야한다는데, 그러면 나는 적용이 안되고, 

그냥 사이즈 Height만 지정해줘도 된다. 

https://forum.dotnetdev.kr/t/wpf-scrollviewer/2907/3

 

WPF scrollviewer 질문입니다.

StackPanel의 경우 속한 컨트롤에 따라 Orientation이 Horizontal일 경우 너비, Vertical일 경우 높이가 속한 컨트롤에 맞춥니다. 공유주신 XAML로 짐작컨데 MaxWidth 또는 MaxHeight를 통해서 ScrollViewer의 최대 사

forum.dotnetdev.kr

 

 

 

 

2. 그냥 Grid만 쓰면 자동으로 나옴. 따로 할 것도 없이!

Grid랑 StackPanel 등 레이아웃들이 ScrollViewr를 기본적으로 셋팅 설정 되어있기 때문에 1번의 사례 빼고는 따로 설정해줄 것이 없다고 한다. 

 

 

 

StackPanel 

자식 요소들을 하나씩 쌓는 레이아웃

즉, 이름 그대로 Stack! 스택에 쌓듯이 요소들이 들어간다. 

<StackPanel>
    <Gird>
    </Gird>
    <Gird>
    </Gird>
<StackPanel>

 

예를 들면 

현재 < StackPanel > 안에 <Gird>가 2개 있다. 

그러면 화면에 

<Grid>

<Grid> 

따로 margin을 안줘도 알아서 층 쌓듣이 들어간다. 

 


 

 

Gird 

행과 열로 이루어진 레이아웃을 만드는 데 사용됩니다.

테이블 형식의 배치가 필요할 때 유용합니다.

이거는 쌓는 개념이 아니라. 존재하는 거다. 

<Gird>
    <Gird>
    </Gird>
    <Gird>
    </Gird>
</Gird>

이렇게 있다면, 

화면에 Gird 요소가 겹친다!

그래서 Margin을 사용해서 위치를 조정해줘야 한다. 

 

 


 

 

Gird로 구역 나누는 방법

[ 예시 코드 ]

<Grid Margin="6">       
    <Grid.RowDefinitions>
        <RowDefinition Height="50"/>
        <RowDefinition Height="50"/>
    </Grid.RowDefinitions>
    
     <Grid Grid.Row="0" Margin="20,10,0,0">
        <Grid.ColumnDefinitions>
        <ColumnDefinition Width="50*"/>
        <ColumnDefinition Width="10"/>
        <ColumnDefinition Width="50*"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
        
        
    <Grid Grid.Row="1" Margin="20,10,0,0">
        <Grid.ColumnDefinitions>
        <ColumnDefinition Width="50*"/>
        <ColumnDefinition Width="10"/>
        <ColumnDefinition Width="50*"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
</Grid.RowDefinitions>

 

 

1. 행 나누기 

<Grid.RowDefinitions>
    <RowDefinition Height="50"/>
    <RowDefinition Height="58"/>
</Grid.RowDefinitions>

행이 2개로 나눠진 것이다. 

 
 

 

 

2. 행 안에서 열 구분하기.

Grid.Row="0" 를 사용해서 행을 선택할 수 있다. 

<Grid Grid.Row="0" Margin="20,10,0,0">
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="50*"/>
    <ColumnDefinition Width="10"/>
    <ColumnDefinition Width="50*"/>
    <ColumnDefinition/>
</Grid.ColumnDefinitions>

ColumnDefinition을 통해서 열을 구분한다. 

 

 
 

2개의 행 중에서 첫번째 행 안에 3개의 열이 존재하게 된다는 것이다. 

     

 


 

실제 사례

코드와 적용된 것을 보면서 이해할 수 있다. 

아직 *에 대해서는 이해가 안간다. 

*는 가변적 인 비율 기반 크기 조정.

 

찾아보니

- 1. 모든 열의 비율 합계를 계산하고, 

- 2. 그리드의 총 가용 너비를 이 합계로 나눈다.

 

그리드의 전체 공간을 비율에 따라 나누어 각 열이나 행에 할당하기에

다양한 해상도와 창 크기에서 올바르게 동작하도록 할 때 유용하다. 

 

<Grid Margin="6">
    <Grid.RowDefinitions>
        <RowDefinition Height="50*"/>
        <RowDefinition Height="50*"/>
    </Grid.RowDefinitions>

    <Grid Grid.Row="0"  Background="White"  >
    </Grid>

    <Grid Grid.Row="1" Background="SkyBlue">            
    </Grid>
</Grid>

 

<Grid Margin="6">
    <Grid.RowDefinitions>
        <RowDefinition Height="50*"/>
        <RowDefinition Height="50*"/>
    </Grid.RowDefinitions>

    <Grid Grid.Row="0"  Background="White"  >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="50*"/>
            <ColumnDefinition Width="10"/>
            <ColumnDefinition Width="50*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
    </Grid>

    <Grid Grid.Row="1" Background="SkyBlue">            
    </Grid>
</Grid>

 

 

<Grid Margin="6">
    <Grid.RowDefinitions>
        <RowDefinition Height="50*"/>
        <RowDefinition Height="50*"/>
    </Grid.RowDefinitions>

    <Grid Grid.Row="0"  Background="White"  >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="50*"/>  <!--0-->
            <ColumnDefinition Width="10*"/>  <!--1-->
            <ColumnDefinition Width="50*"/>  <!--2-->
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" Background="Black">
        </Grid>
        <Grid Grid.Column="1" Background="Yellow">
        </Grid>
        <Grid Grid.Column="2" Background="Gray">
        </Grid>
    </Grid>

    <Grid Grid.Row="1" Background="SkyBlue">            
    </Grid>
</Grid>

 

 

java 백엔드 개발자만 안 뽑는다. 

나는 멀티캠퍼스 듣기전까지 다른 언어로 crud개발은 해봤지만,  java로 백엔드 개발은 안해봤다. 

수업은 하루에 8시간이기 때문에 너~~무 힘들다. 

수업내용은 진~~~짜 기초부터 시작하기때문에 하나의 언어를 해봤다면 진짜 비 추천!!!!!!!

그냥 인프런 강의 사서 듣는게 100% 나은 편이다. 왜냐하면 이건 비.전.공.자를 위한 프로그램이니까!

 

수업은 주입식이다. 

하지만 회사는 다양하게 변하고 응용을 해야한다. 프로그램 이수자가 아니라!!

본인이 원하는 '무언가'를 "스스로" 만들어본 경험을 원한다. 

 

그렇기 때문에 좋은 회사에 가고 싶다면,

강의를 통해서 개념을 쌓고 스스로 응용해서 만들어가보는 것을 추천한다. 

 

마지막 달 멘토링에서 네카라쿠배당토에서 일하는 분들을 만났는데 

대기업에 아무것도 모르고 입사했다고 한다.;;;; 그때는 다 알려줬다고, (물론 그 이후에 노력을 열심히 하셨겠지만!)

그 대기업 지금은..  아무것도 모르는 신입 안 뽑는다! 거의 10년 전에는 개발자가 부!족!이여서 연봉이 높았지만 지금은 그냥 뭐든 3000 초봉을 생각하면 된다. 

(서울은 사람이 많아서 그런가 2800도 많던데;;)

 

 

mybatis 배우면 안된다는데!?

mybatis, jpa 둘다 배운다. 

그리고 그 둘은 같은 원리이지만 다른 방식이다. 

즉 javacript, java 이런 느낌? 다르지만 하나라도 해봤으면 다른 것을 배우는데는 전혀 오랜 시간이 걸리지 않을 것. 

sts4로 개발하는 것을 배웠는데, 요즘은 intelij로 한다며!? -> 둘다 비슷비슷하다. 폴더 구조 방식이 조금 달라질 뿐. 

그건 추후에 배우면 된다.는 생각...

 

과거의 기술을 배우기 때문에 서칭해본 결과, 

인프런"김영한" 씨껄로 공부하고 입사한 사람들이 더 많은데 (난 안해봄)

잘 생각해 보시길!

 

 

 

요즘 취업 현실

취업은 뉴스에 보는 것 처럼 어렵다.

면접 가니 2년전에는 선배들이 꿀빨았을 텐데 .... 많이 힘들죠? 라는 말을 들었다. 

학원이 엄청 많으니, 실력자도 많아지고 그렇기 때문에 이미 기초적인 개발자들은 다 구한 상태. 

많은 회사들이 더 높은 스팩을 가진, 학원에서 배운건 이미 알고 있어야하고 더 높은 스팩을 요구한다. 

 

그리고 Java 백엔드 개발자만 뽑은건 별로 없다. 

그런건 si쪽.... 그런데 si 할려고 여기 진로를 선택한 사람을... 없지 않을까?

 

 

 

결국 나는...

java를 버리고 다른 언어로 전향했다. 

서울을 안갈꺼라면 자기 지역에 구인 구직을 잘 보기를 바란다. 

사람인 >= 잡코리아 >= 워크넷..

워크넷은 국가에서 연계할려고 하는 게 많아서 보기는 봐야하지만 자주 볼 것은 아닌 것 같다. 

구인구직으로 내가 입사할 곳을 정하고 기술을 생각해 보는 것을 먼저해라!

 

 

 

총정리

 

내 후기는 많은 기수들 중 1개일 뿐이고 본인의 상황에서는 어떻게 변할지는 모른다. 

하지만 6개월이라는 시간동안 매일 8시간씩 수업을 듣는 다는 것은 엄청난 일이다. 

대학처럼 여유롭게 2~3시간 듣고 쉬고, 이런것이 아니라 빡빡하게 진도를 나가기때문에 매일 복습하는 것도 거의 불가능이다.(나는^^)

 

문과생이 한번도전하고 싶어서 준비없이 한다면! 추천한다.

   (그래도 java 반복문, 포인터, 구조체까지는 완벽히 한달간 깊게 공부하고 뛰어들기를 추천한다.)

하지만 crud를 한번씩 해봤고, (아쉽운 것이라도!) 프로젝트가 1개라도 있다면 멀티캠퍼스는 비추천이다!

 

 

 

초봉 3000만원을 원하는 문과생은 추천.
전공자는 비추천!

 

 

 

인생에서 길다면 길고 짧다면 짧은 6개월을 멀티캠퍼스에 들어가면 취업 할 수 있을까? 라는 고민에 나의 대답은...

노력하면... 뭐든지 된다. 

그 방향이 잘못되었더라도.

 

윈도우에서 ctrl + shift 누르면 한글이 변경되는데, 거기서 자간이 달라서 오류가 생겼다!

 

 

INSERT 해야하나??

INSERT INTO [table 명] (column 명) VALUES(0000);


nono! 
이러면 에러 난다. 

 

한 컬럼에 동일한 값을 전부 넣는 쿼리를 작성해줘.

( 이건 동일한 값만 들어간다! )

UPDATE [tabel_name]
SET {column_name} = '0000'

[] 은 유지,  {}은 제거해야함. 

 

 

 

001, 002, 003 이렇게 맵핑 해주는 mssql 쿼리를 작성해줘.
NMA_CLIENT 컬럼에 순차적으로 증가하는 쿼리를 만들어줘. 

 

RowNum AS 함수를 사용해서 할 수 있다!

;WITH CTE AS (
    SELECT
        {매핑할 컬럼명},
        ROW_NUMBER() OVER (ORDER BY {고유키 컬럼명}) AS RowNum
    FROM
        [테이블명]
)
UPDATE CTE
SET {매핑할 컬럼명} = RIGHT('000' + CAST(RowNum AS VARCHAR(3)), 3);

 

 

 

[Git]

 소프트웨어 개발과정에서 소프코드의 변경 사항을 추적하기 위한 분산 버전 관리 시스템

2005년에 리눅스를 만든 리누스 토발즈가 처음 개발했다. 

Git은 GNU General Puble License(GPL) 버전 2의 조항에 따라 배포되는 무료 오픈소스 소프트웨어이다. 

 

 

[버전 관리 시스템]

공동 개발 가능
사용자의 수정이력을 기록(되돌리기 가능)
인터넷 연결 없이도 수정 사항을 만들 수 있음

 

 

[저장소]

깃 프로젝트는 각 파일의 개정내역과 관련 파일 및 폴더 전체 모음을 포함한다. 

커밋은 열결리스트로 존재하고 브랜치라고 하는 여러개발라인으로 구성도니다. 

 

 


[깃허브]

Git을 호스팅하고 온라인 상에서 협업을 가능하게 하는 플랫폼

여러 사용자가 프로젝트를 공유하고 관리할 수 있으며, 이슈 트래킹, 코드 리뷰, 풀 리퀘스트 등의 기능을 제공

개발 프로세스를 더욱 효율적

 

 

특징

- 원격 저장소를 무료로 제공해줌.
- 전 세계에서 가장 많은 양의 소스코드 보유
- 원활한 코드 컴토
- 통합 개발 환경(IDE) 연동
- 지속적인 통합과 배포(CI/CD) 지원
- 보안 기능
- 소셜 네트워킹 기능

 

이해가 안가는 내용이나, 

설명하기에는 부족했던 부분들을 자세히 작성하며 기록해 나아갈 예정이다.

 

 

 

 

 

20번_ 자바 코드 결과값 

 

class SuperObj {  //부모클래스
    public void show() {
        print();
    }

    public void print() {
    	print();
        System.out.print("Super");
    }
}

class SubObj extends SuperObj {	//자식클래스
    @Override
    public void show() {
        super.print();
    }

    @Override
    public void print() {
        System.out.print("Sub");
    }
}

public class Soojebi {
    public static void main(String[] args) {
        SuperObj s = new SubObj();	//이 코드에 따라 위의 결과값이 달라진다. 
        s.show();
    }
}

 

 

풀이 

1.  java는 main에서 시작한다. 

2. SuperObj s = new SubObj();   //다형성_ 부모 클래스 타입의 변수에 자식 클래스의 객체를 할당하는 것이다. 

3. s.show();

4. Subobj class의 show() 함수가 실행된다. 

4-1. super.print();   //Superobj class로 이동한다. 

 

5. Superobj class의 print()함수 실행

5-1. print()함수 _ print(); // 이는 자식 class에 있는 print()를 이용하는 것이다.  <- Sub실행

5-2. 자식 class가 종료되고 다시 부모클래스의 장소로 와서 Super가 실행된다. 

 

 

 


=> 이는 다형성의 개념과 오버라이딩의 개념을 알아야한다. 

오버라이딩 : 부모 class의 매서드를 자식class 매소드의 재정의하는 것

다형성 : 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다. 

 

+ 오버로딩 :  같은 이름의 매소드가 매개변수의 타입이나 개수에 따라 다르게 정의되는 것을 말한다. 

 

 

 

참조 사이트 : https://www.tcpschool.com/java/java_inheritance_overriding 

 

 

 

 

정답
더보기

SubSuper

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

현재 나의 티스토리에서 사용중인 스킨은 다음과 같다. 

Square 스킨

 


 

변경 방법


1. 사용중인 스킨 ->  편집 클릭

 

 

 

2. 우측에 html 편집 클릭

 

 

3. css 클릭 후 코드를 넣어준다. (2개만 넣어주면 된다.)

 

 

 

 


 

 

첫번째 코드 수정 사항

기존 코드
#sidebar .category ul li ul li ul {
  margin: 0 0 0 15px;
  padding: 0;
}

 

수정된 코드
#sidebar .category ul li ul li ul {
  margin: 0 0 0 15px;
  padding: 0;
  display: none;
}

 

 

 

두번째 코드는 추가!

#sidebar .category ul li:hover ul {
    display: block; /* 마우스를 올렸을 때 하위 목록을 보이도록 함 */
}

(아무곳에 추가하면된다.)

 

끝~

 


 

 

 

 

그러면 왼쪽이었던 표시가

다 접어지고 오른쪽 같이 변경된다.

 

 

 

 

 

  •  상황
    • sts와 jdk 설치 후 spring3를 하려는데, Spring Legacy Project -> spring mvc project가 생성이 안된다!!! ㅜ.ㅜ 

 

 

 

 

# 에러 메세지

An error has occurred. See error log for more details.

java.lang.ExceptionInInitializerError

 

An error has occurred. See error log for more details.
Could not initialize class com.thoughtworks.xstream.converters.collections.PropertiesConverter

 

 


여러가지 시도를 해보았다.  ( 가장 마지막 부터 보기 바란다. )

 

- eclipse와 jdk 호환 문제 

- 환경변수 문제 

- -vm 추가 등등 

- m1 호환성문제!

 

 

 


 

 

1. 환경변수

터미널에서 이렇게 명령어를 쳤을때, 나오면 환경변수 패스가 잡혀 있는 것이다. 

환경변수 변경은 아래 사이트를 참고함.

https://llighter.github.io/install-java-on-mac/

 

맥에서 Brew로 자바 설치하기(feat. 자바버전 바꾸기)

 

llighter.github.io

 

 


 

 

2. jdk 버전 _ 11이면 된다. 

결론적으로는, 버전에 대해서 뭐가 나오든 상관없는 것 같다. 

왜냐하면 spring sts 프로그램(이클립스)에서 따로 설정해주면 되는 것이기에

터미널에서 뭐가 보이든 상관이 없다!

 

 

 

아래와 같이 모든 자바 버전을 검색해서 11버전이 나오면 된다. 

/usr/libexec/java_home -V

 


 

 

3. -vm 추가 

 

- 1). Eclipse에 추가 

   자신이 설치된 eclipse 프로그램(우클릭 후 -> 패키지 내용보기)에서 가서 eclipse.ini 파일을 연다. 

/Users/{사용자이름}/eclipse/jee-2023-12/Eclipse.app/Contents/Eclipse/eclipse.ini

위에는 이클립스 경로(사람마다 설치 위치가 다르다. 보통 응용 프로그램에 설치 되는데, 나는 이때 이상한 곳에 했나보다)

 

 

vmargs위에 추가해준다. 

(자신의 jdk-11버전 경로에!)

그리고 18번째 줄에 version이 나는 17로 되어있었다. 11로 변경해주자.

-vm
/Library/Java/JavaVirtualMachines/jdk-11.0.20.jdk/Contents/Home/bin/java

 

 

이클립스 쪽의 info.plist는 수정하지 않았다.


 

취소!!

이러면! 기존 eclipse 파일이 안열림..!

그래서 기존 17버전으로 변경해도 sts 열리고

eclipse도 에러 안남. 

 

 

 

- 2). sts에 추가

 

sts 우클릭해서 패키지 내용보기를 한다. 

 

 

비주얼 스튜디오에서 열어서 

상단에 1,2줄에 

-vm
/Library/Java/JavaVirtualMachines/jdk-11.0.20.jdk/Contents/Home/bin/java

이것을 추가하고 

 

12줄에 version을 11로 변경

 

그리고 info.plist를 열어서

원래는 주석이었던 아래 코드를 넣어준다.  (라이브러리는 본인이 최근 설치한 경로, 나는 예전꺼 삭제했는데 여기주석에 예전꺼가 있었다)

<string>-vm</string><string>/Library/Java/JavaVirtualMachines/jdk-11.0.20.jdk/Contents/Home/bin/java</string>

 

 


 

 

4. sts, jdk 재설치 후 재설정. 

 

 

 

 

 

3시간쯤 에러 메세지만 검색하다가... 문뜩 다른 방식으로 검색 해봤다. 

M1에서 sts 설치 방법을 해볼까?  ->  [ STS3 Downloads mac m1 ]

 

그렇게 나온것이 아래 블로그!

https://velog.io/@piaocanyi/M1-MAC%EC%97%90%EC%84%9C-STS3-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EC%8B%A4%ED%96%89

 

velog

 

velog.io

 

이 블로그에 따르면

sts3는 macosx- arm이 없고, x86뿐이다! ?!?!?!!? 충격적 소식!

와........... 그래서 맥북이라도 jdk를 x86으로 다운 받아야했던것이다!!

어쩐지!!

 


 

- 1. sts 설치 

https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3

이버전 가운데 macosx를 다운받고! (진짜 x86이네...;;;)

프로그램 설치하면 됨. 

 

 

 

 

 

 

 

- 2. jdk 설치 (x86으로)

 

https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html 

Java SE Development Kit 11.0.20 버전

 

macOS 중에서 M1칩임에도 불구하고 ARM이 아닌, x64로 다운한다. 

그리고 dmg가 아니라 .tar로 다운받는다. 

 

압축을 풀고

/Library/Java/JavaVirtualMachines   이 경로! 폴더를 이동한다. 

( 라이브러리가 user 안에 있는 게 아니라 HD에 있는 라이브러리다!)

 

 

그러고 위에꺼 다시 맞춰주니 잘됨!


 

Spring Tool Suite 3에서 해줘야 할것은

 

 

 

1. jdk 연동

Add.. 해서 방금 설치한 jdk 연결해줌.

 

 

 

2. compiler 버전 11로 변경

 

 

 

3. 프로젝트 생성

- Spring Legacy Project 선택

 

 

- Configure templates.. 선택

 

- defaults 만 남겨두기

 

 

- spring mvc Project 선택하고 Next ->

 

 

 

- 이게 나오면 되는거야!!!!!!!! ㅜ.ㅜ

여기서 finish 하고 가만히 있어야한다. 로딩 최대 1분정도 걸리는 것 같다. 

 

 

 

 

행복 그자체...

블로그들 보다가 2~3일 걸린 사람들도 많았어서 포기할까 하다가

프로그램 재설치 하자는 마음을 먹자! 

좋은 블로그를 발견했다. 

포기하는 것도 좋은 방법이다.

 

 

 

 

 

 

오늘 한 것 _ web10servlet_HR

9시_ 사원등록에 목록보기로 변경 

1. empInsert.do에서 job_id을 입력이 아닌 선택 목록창 나오게 하는 방법을 배움. 

 

10시_ 사원등록에 목록보기로 변경 

2. manager_id, department_id도 db에서 가져와서 목록창으로 선택하게 하기. 

1. insert.jsp
<tr>
<td><label for="manager_id">manager_id:</label></td>
<td>
<select name="manager_id">
<c:forEach var="managers" items="${manager_ids}">
<option value ="${managers.manager_id}">${managers.manager_id}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td><label for="department_id">department_id:</label></td>
<td>
<select name="department_id">
<c:forEach var="departments" items="${department_ids}">
<option value ="${departments.department_id}">${departments.department_id}</option>
</c:forEach>
</select>
</td>
</tr>

2. controller.java
if(sPath.equals("/empInsert.do")) {
List<JOBVO> job_ids = dao.getJob_ids();
// for(JOBVO x : job_ids) {
// System.out.println(x.getJob_id());
// }

List<DepartmentVO> manager_ids = dao.getmanager_ids();
// for(DepartmentVO x : manager_ids) {
// System.out.println(x.getManager_id());
// }

List<DepartmentVO> department_ids = dao.getdepartment_ids();

request.setAttribute("job_ids", job_ids);
request.setAttribute("manager_ids", manager_ids);
request.setAttribute("department_ids", department_ids);

request.getRequestDispatcher("emp/insert.jsp").forward(request, response);
}

3. DAO.java에 getmanager_ids()와 getdepartment_ids() 추가 
public List<JOBVO> getJob_ids();
public List<DepartmentVO> getmanager_ids();
public List<DepartmentVO> getdepartment_ids();

4. DAOimpl에 추상클래스 상속을 받아라. 
    - The type EmployeeDAOimpl must implement the inherited abstract method {get~}
@Override
public List<DepartmentVO> getmanager_ids() {
System.out.println("getmanager_ids()...");

List<DepartmentVO> manager_ids = new ArrayList<DepartmentVO>();

try {
// 1.커넥션(계정접속)
conn = DriverManager.getConnection(DBinfo.URL, DBinfo.USER_NAME, DBinfo.PASSWORD);
System.out.println("conn successed...");

// 2.SQL(질의문) 세팅
pstmt = conn.prepareStatement(EmployeeSQL.SELECT_MANAGER_ID);

// 3.결과반환 rs >> vos
rs = pstmt.executeQuery();
System.out.println(rs);
while (rs.next()) {
DepartmentVO vo = new DepartmentVO();
vo.setManager_id(rs.getInt("manager_id"));
manager_ids.add(vo);
}

} catch (SQLException e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} // end finally

return manager_ids;
}

@Override
public List<DepartmentVO> getdepartment_ids() {
System.out.println("getdepartment_ids()...");

List<DepartmentVO> department_ids = new ArrayList<DepartmentVO>();

try {
// 1.커넥션(계정접속)
conn = DriverManager.getConnection(DBinfo.URL, DBinfo.USER_NAME, DBinfo.PASSWORD);
System.out.println("conn successed...");

// 2.SQL(질의문) 세팅
pstmt = conn.prepareStatement(EmployeeSQL.SELECT_DEPARTMENT_ID);

// 3.결과반환 rs >> vos
rs = pstmt.executeQuery();
System.out.println(rs);
while (rs.next()) {
DepartmentVO vo = new DepartmentVO();
vo.setDepartment_id(rs.getInt("department_id"));
department_ids.add(vo);
}

} catch (SQLException e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} // end finally
return department_ids;
}

5. SQL 추가 
String SELECT_JOB_ID = "select job_id from jobs order by job_id";

String SELECT_MANAGER_ID ="select manager_id from departments where manager_id is not null order by manager_id";

String SELECT_DEPARTMENT_ID = "select department_id from departments where department_id is not null order by department_id";

 

 

11시_

3. 부서등록 폼(department)에서 manger_id도 목록창으로 변경. 

 - 이는 모든 사원중 1명으로 employeeDB에 접근해서 가져와야한다. 

<select name="manager_id">
<c:forEach var="Employees" items="${manager_ids}">
<option value ="${Employees.employee_id}">${Employees.employee_id}</option>
</c:forEach>
</select>

var 변수는 내가 설정하는 것이며, option value안의 설정 이름과 동일해야한다. 

${manager_ids}는 controller.java에서 설정한  request.setAttribute("manager_ids", employees_ids);

에서 오는 것임으로 이것도 변수다. 

 

이클립스 줄맞춤 단축키는 command + shift + f

 

4. 부서등록 폼에서 location_id도 목록창으로 변경.

<td>
<select name="location_id">
<c:forEach var="locations" items="${location_ids}">
<option value="${locations.location_id}">${locations.location_id}</option>
</c:forEach>
</select>
</td>

location_id 오타 나서 에러뜨는 문제에 대해서 실수함. location_ids로 하면 안된다. 

 


13시 _ 직원정보 수정, 삭제 기능 만들기 

14시 _ 부서정보 수정, 삭제 기능 만들기 

 

15시 _ web11fileupload 실습.

다양한 라이브러리들을 다운 받을 수 있는 사이트 
https://mvnrepository.com/

파일 업로드를 위해서 2가지 라이브러리를 다운 받는다. 
- commons-fileupload.jar
- commons-io.jar

기존에는 request.getParameter("name") 이런 방식으로 값을 받았다. 
하지만 파일의 경우에는 다른 방식으로 받아야한다. 

boolean isMuultipart = ServletFileUpload.isMultipartContent(request);
System.out.println(isMuultipart);
정상적으로 파일이 들어오면 true를 반환한다. 

if(isMuultipart) {
String realPath = request.getServletContext().getRealPath("uploadimg");
System.out.println(realPath);

File temporaryDir = new File(realPath);
DiskFileItemFactory factory = new DiskFileItemFactory();
int max = 1024 * 1024 * 10; //10MB

factory.setSizeThreshold(max);
factory.setRepository(temporaryDir);
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
}
realPath는 사진 업로드할 폴더 경로를 의미한다. 


 

 

 

16시_ 파일 업로드를 DB와 연결해서 업도르 실행한다. 

1. SQL DEbeloper에 먼저 테이블 생성한다. 


< 입력값이 잘 들어 왔다. >


2. 아래와 같이 .java 파일들을 만들어서 연결을 하여 실행해 준다. 





 
 

 

 

17시_ 마지막 시간! _ 업로드 한 파일들 목록 보게 하기 

 

 

 

 

오늘도 정말 많은 수업진도를 나아갔다. 

중간에 갑자기 너무 많은 과제와 짧은 시간으로 이루어져서 당황했지만, 

어영부영 급급하게 쉬는시간을 포기하고 성공은 했지만, 나의 복습 부족을 인지하게 되는 시간이 되었던 것 같다. 

 

오늘은 복습을 좀 더 한 후에 이해를 해 볼 예정이다. 

또한 Job테이블을 이용해서 emp, dept를 만들었던 기능을 복습해 보는 시간을 오늘은 꼭! 하고 블로그를 써보자. 

 

 


 

오늘도 잡생각이 많이 들었다. 

수업을 들으면 이해가 다 되는 것 같은데, 막상 혼자서 할려고 하면 버벅거리고 허둥대는 것 같다. 

어느새 한달이 지났다는 것도 믿겨지지가 않는다. 

 

처음에는 블로그도 매일 써야지 했는데 노션에만 정리해두고 나중에 또 할려고 하니 안하게 되었다. 

그래서 바로바로 쉬는시간마다 한 내용을 정리해 보니 복습겸 기록이 동시에 가능해진는 것 같아서 앞으로는 이렇게 해 볼 생각이다. 

점점 여유 시간이 부족해 지는 느낌이다. 

끝까지 포기하지 않고, 열심히 해보자!!

 

 

 

 

+ Recent posts