1. db진도 시작
오라클 데이터베이스를 시작했다.
기존 ArrayList로 임시 데이터 값을 클래스 안에 담아서 프로토 타입으로 만들어뒀던 과정들을
db에 접속해서 진행하는 것으로 바꿨다.
2. ArrayList에서 db로 전환
db사용하는 것이 생각보다 쉬워서
나름 프로토 타입으로 활용했던 ArrayList용으로 만들어뒀던 모든 기능들을 db용으로 전환하는데
많은 에너지나 시간이 소요되지 않았다.
public void emailVerifier() {
//1. 공백 검증
if(inputEmail.getText() == null || inputEmail.getText().length() == 0) {
emailV.setText("");
return;
}
//2. 형식 검증
if(!isValidEmail(inputEmail.getText())) {
emailV.setForeground(Color.red);
emailV.setText("유효하지 않은 이메일 형식");
return;
}
//3. 중복 검증
if(model.hasEmail(inputEmail.getText())) {
emailV.setForeground(Color.red);
emailV.setText("사용중인 이메일");
return;
}
//4. 사용 가능
emailV.setForeground(Color.blue);
emailV.setText("사용가능한 이메일");
return;
}
3. Thread와 JLabel을 활용한 실시간 데이터 검증
자바스크립트를 아직 배우지 않아서 중복검증 유효성 검증들을 위해 JLabel에 스레드를 걸었는데,
한 스레드에서 여러 검증기능을 돌리려니까 알 수 없는 오류가 간헐적으로 발생했었다.
각 JTextField에 isFocusOwner() 조건을 만족할 때 해당 값을 검증하는 식으로 run()메소드를 정리하고 나니까
그 이후로는 오류가 없는 듯 하다.
@Override
public void run() {
while(true) {
if(!frame.isVisible()) {break;}
if(inputEmail.isFocusOwner()) {emailVerifier();}
if(inputPW1.isFocusOwner() || inputPW2.isFocusOwner()) {passwordVerifier();}
if(inputNickName.isFocusOwner()) {nickNameVerifier();}
if(inputPhone.isFocusOwner()) {phoneVerifier();}
}
}
4. JLayer를 이용한 배경음악 재생
로그인 회원가입을 맡다 보니 채팅, 서버연결과 같은 부분을 활용할 기회가 적어서 잡기들을 추가하기 시작했다.
로그인 화면 좌상단에 JComboBox를 이용해 음악리스트를 선택해서 재생할 수 있게 했다.
로그인 화면 좌하단에 채팅창을 만들어서 비로그인 채팅을 만들었다.
5. 대기실, 게임방 구현
로그인 후 대기실로, 대기실에서 게임방으로, 게임방에서 대기실로.
학원 환경상 서버 아이피를 바꾸는 건 번거로워서 같은 아이피에서 포트만 쪼개기로 했다.
대기실에서 방생성하면 DefaultTableModel에 리스트가 추가되고
해당 방을 더블클릭하는 이벤트가 발생하면 채팅창이 하나 생성되고
해당 창에서의 채팅과 대기실의 채팅이 분리되는 것 까지 구현했다.
새 채팅창과 대기실 채팅창의 포트번호를 분리했다.
남은 과제는 DefaultTableModel의 방 리스트를 db에서 가져와서 Thread로 구현하는 것,
현재 접속자를 db에서 가져와서 Thread로 구현하는 것,
게임방에서 대기실로 돌아오는 것 등이다.
<db에 있는 DATE를 원하는 형식으로 표현하기>
select to_char(logtime, 'yyyy.mm.dd') from db;
1.db라는 이름의 테이블에서
2.logtime 이라는 레코드를 가져오되,
3.캐릭터 형변환을 커스텀 형식으로 반환한다. 결과는 이렇게 나온다. 2020.05.12.
4.단, 형변환시 해당 컬럼명이 to_char로 바뀌기 때문에 jdbc에서도 반영해줘야한다
5.또는 as 별칭을 추가해준다.
select to_char(logtime, 'yyyy.mm.dd') as logtime from db;
기본키 설정
ALTER TABLE 테이블명 ADD PRIMARY KEY (컬럼명1, 컬럼명2, 컬럼명3 ...)
ex) ALTER TABLE db ADD PRIMARY KEY (email);
기본키 삭제
ALTER TABLE 테이블명 DROP PRIMARY KEY
컬럼명 변경
ALTER TABLE 테이블명 RENAME COLUMN 이전컬럼명 TO 수정후컬럼명;
컬럼길이변경
ALTER TABLE 테이블명 MODIFY (컬럼명 테이터타입(데이터길이));
데이터 유지하면서 컬럼 데이터타입 변경하기
-
데이터 통째로 다른 곳에 복사해두기
CREATE TABLE TMP_테이블명 AS SELECT * FROM 테이블명; -
기존 테이블 완전 삭제
TURNCATE TABLE 테이블명; //주의 rollback 불가 + 무조건 전체삭제 + -
기존 테이블의 수정하고자 하는 컬럼의 데이터타입 변경
ALTER TABLE 테이블명 MODIFY (컬럼명 데이터타입(데이터길이)); -
백업 테이블의 데이터를 기존 테이블에 복사
INSERT INTO 테이블명 SELECT * FROM TMP_테이블명; -
작업 완료 확인
desc 테이블명;
select * from 테이블명; -
백업 테이블 삭제 및 커밋
DROP TABLE TMP_테이블명;
commit;
INSERT INTO 테이블명(컬럼1,컬럼2) VALUES(컬럼1넣을값, 컬럼2넣을값);
<Read 읽기>
SELECT * FROM tab; 모든 테이블 보기
SELECT * FROM 테이블명; 해당 테이블의 모든 값 보기
DESC 테이블명; 테이블의 컬럼과 조건을 보여줌
SELECT * FROM 연산 WHERE x=25 and y>30;
SELECT * FROM 연산 WHERE z is / is not null;
SELECT * FROM dbtest WHERE lower(name) = 'hong'; --db는 대소문자 가린다. 대소문자 무시하고 검색할떄 쓰는 방법
SELECT * FROM dbtest WHERE name like '홍%''%홍''%홍%''_홍%'; -- 홍으로 시작하는 값 또는 홍으로 끝나는 값 또는 홍이들어간값 또는 2번째글자가 홍인 애들
SELECT * FROM dbtest ORDER BY NAME asc, AGE desc; 이름으로 오름차순 asc가 기본값이어서 생략 가능. 내림차순은 desc
<Update 수정>
UPDATE dbtest set age = age + 1; 모든 레코드의 나의 1살 증가
UPDATE dbtest set age = 0, height = 0 WHERE name = '홍길동';
<Delete 삭제>
DROP TABLE 테이블명; 휴지통으로 삭제
FLASHBACK TABLE 테이블명 TO BEFORE DROP; 휴지통에서 복원
DROP TABLE 테이블명 PURGE; 완전삭제
DELETE dbtest WHERE name = '홍길동';
테이블 삭제 후 복원
FLASHBACK TABLE 테이블명 TO BEFORE DROP;
입력 완료 후 commit 입력 후 ; 누르고 엔터해주면된다
rollback; 기능은 commit 이전 모든 트랜잭션을 취소시킨다.
트랜잭션 : insert update delete. 얘네 셋은 lock이 걸려있다고 한다.
테이블에 더 많은 컬럼이 있더라도 NOT NULL이 아닌 컬럼은 빼고 입력해도 된다
테이블명 뒤의 컬럼명을 생략하려면 모든 컬럼에 대한 value를 다 순서대로 입력해야 한다
------------------------------------------------------------------------------------------------------
외부 jar 파일을 임포트 할 때는 해당 프로젝트에 src폴더와 같은 레벨에 lib라는 폴더를 만들어 거기에 jar파일을 넣고
Add external JARs 가 아닌 Add JARs를 해야 한다. 그래야 다른 환경에 가서도 오류가 안 난다
정상 완료시 Referenced Libraries 라고 나온다
------------------------------------------------------------------------------------------------------
c:\program files\java\jre\lib\ext\ 여기에 jar파일 넣으면 됨
'Java & Spring' 카테고리의 다른 글
2020.05.22 (금) 미니 프로젝트 발표일 : 캐치마인드 완성 CatchMind (2) | 2020.05.22 |
---|---|
2020.05.14 (목) 학습 : 캐치마인드 Socket 그림판 (0) | 2020.05.15 |
2020.05.07 (목) 학습 : 그림판 더블버퍼링, jSmooth (0) | 2020.05.07 |
2020.05.06 (수) 학습 : 네트워크, 채팅, 서버 클라이언트 (0) | 2020.05.07 |
2020.05.04 (월) 학습 : 컴파일과 실행 동시에, Socket, 자바프로젝트 시작 (캐치마인드) (0) | 2020.05.04 |