[설계1]
우선 기존에 회원가입 창을 가지고 있던 MemberShipView을 이용하여 값을 받아옴 -> 해결
패스워드 입력시 : 값들이 입력되는데 캡슐화로 ( *** ) 바꾼다.
else if (obj == jbtn_ins)
{
JOptionPane.showMessageDialog(this,"등록이 완료되었습니다.","INFO", JOptionPane.INFORMATION_MESSAGE);
dispose();
}
[설계2]
값을 읽어 들여 --> 새로은 VO을 만들어서 ---> VO & 디비를 연동한다. MemberDTO 사용
MemberShipView 클래스에서만 사용하면 된다. -> 전역변수로 선언 -> List? or Map? -> 나는 List로 구현하면 될 것 같다.
구성[DB 고려]
이걸 기준으로 Sample DataBase 설계
여기 까지 VO를 만들고 -> 예제 샘플 값을 입력 완료 했다.
그렇게 되면 여기서 어떻게 해야 될까? -> 보완할 점이 필요하다.
Gender는 남자/여자(스크롤)로 되어 있다. 그 값을 어떻게 가져 올 것인가?
ZipCode & Address에서도 값을 어떻게 가져올 것이가에대한 고민을 해야 된다.
회원가입창에서 -> 회원정보로 넘어 올 때 어떻게 매핑 하는지가 제일 중요하다.
현재까지 디비 연동 완료
회원정보까지 디비 넘기는 것 구현 완료
로그아웃 구현
앞으로 해야 될 것.
로그아웃 구현
본격적으로 소켓통신 공부 시작
LoginForm은 CONFIRM을 누르면 -> 디비연동(DBConnection)이 됐음(로그로 DB연결 완료)로 sql 연동 -> 회원가입(MembershipView)로 넘어간다.
[등록 눌렀을 경우]
1. 등록 누르면 디비로 넘어가는데 이 때 쿼리문 실행 (MemberDao-save)에서 해당 부분 진행 -> 리턴 값을 어디에다 줘?[MembershipView - actionPerformed] 에서 이벤트 처리 진행 -> 이 저장한 값을
2.
delete from member;
create table member(
username varchar2(15),
password varchar2(15),
nickname varchar2(15)
);
nickname을 추가 했는데 nullpointexception이 나옴 -> 미치고 팔짝 뛰겠음 -> username을 세션값으로 넘겨줬는데 해당 부분을 바꾼다면?
Cannot invoke "String.length()" because "username" is null 이런 에러가 발생함
단위 테스트 했는데 --> 로그인쪽 화면 구현에선 문제가 없음 --> MemberListFrame아니면 MemberDao문제 --> 아니면 로그인 시 세션으로 넘기는 username일지도? 내 추측은 후자다.
해결완료 -> DTO가 문제여서 조건을 걸었던 부분들이 전부 문제가 되었다. 해당 부분 삭제
소켓 연동은 성공 했으나 해당 오류가 발생했다. 필자가 판단하여 봤을 때
닉네임이 넘어오지 않아서
java.util.NoSuchElementException
at java.base/java.util.StringTokenizer.nextToken(StringTokenizer.java:347)
해당 오류가 발생했다. 그렇다면 server/ serverThead /clientThread 모두 닉네임을 연동 시켜야한다.
-> 그래서 SocketClient의 this를 통해 ->
SocketClient sc = null;
public SocketClientThread(SocketClient socketClient) {
this.sc =socketClient;
}
하여 sc.nickname 을 사용했는데 연동이 안 된다.
s===>전체
s===>부산
s===>전남
s===>대구
대구
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:480)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:413)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:508)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:203)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:510)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
at com.util.DBConnectionMgr.getConnection(DBConnectionMgr.java:57)
at com.chat.ZipCodeView.refreshData(ZipCodeView.java:117)
at com.chat.ZipCodeView.actionPerformed(ZipCodeView.java:149)
at java.desktop/javax.swing.JTextField.fireActionPerformed(JTextField.java:525)
at java.desktop/javax.swing.JTextField.postActionEvent(JTextField.java:740)
at java.desktop/javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:856)
at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810)
at java.desktop/javax.swing.JComponent.processKeyBinding(JComponent.java:2947)
at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:2995)
at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2909)
at java.desktop/java.awt.Component.processEvent(Component.java:6403)
at java.desktop/java.awt.Container.processEvent(Container.java:2266)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1952)
at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883)
at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1150)
at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020)
at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4882)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:361)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:966)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:292)
... 47 more
2023.10.19일 오류 발생 해결 아직 못함 -> Oracle 다시 깔아야 하는가?
해당 부분 참고
java.sql.SQLSyntaxErrorException: ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
에러 발생 --> 해결방법은?
애초에 처음에 우편번호 찾기 할 때 에러가 발생함 --> 이 부분을 먼저 처리 후 디비 연동 및 사용 할 것 .
그래서 MemberListFrame / 및 MemberDTO / DAO 전부 수정 완료
-> 이제 매핑하는거만 남았다. --> 간단하지만 디비 스키마 만들었고 , 그걸 토대로 데이터 저장 창까지 구현은 다 했다.
다음 단계는 회원가입을 통해 -> 회원정보에 디비 연동하여 구현 하는 것이다. 계속 이 지점에서 머물고 있는 것 같지만, 이전에는 행/정보 입력 칸이 비어 있어서 아예 구현이 안됐다..
그러면 회원가입창인 MemberShipView 보고 / MemberListFrame 둘 사이에 관계를 구현하면 될 것 같다. (쉽게 얘기하면 붙이는 걸 어떤식으로 할꺼냐의 문제다)
멤버쉽뷰를 -> This를 통해서 Frame에 넘긴다? 구체적으로 회원가입 창 등록을 눌렀을 때 디비 정보(아이디/패스워드)가 MemberListFrame여기로 넘어가야한다.
rs에서 에러가 계속적으로 발생함 "PASSWORD": 부적합한 식별자 -> 에러 해결 --> 테이블 설정들어가서 --> 테이블 업데이트 했음
해당 부분 필자가 toad에 테이블 조건을 primary key로 잘 못 줘서 delete 후 -> 다시 테이블 생성함 -> 해결
블로그 하다가, 깃허브 (이슈등록 및 프로젝트에서) 정리했다.
https://github.com/Ohsaam/ChatJava/issues