728x90

 

상황

VS CODE에서 Live Server를 쓰면 바로바로 적용되서 보이는데

이클립스나 STS에서 톰캣이랑 같이 서버를 돌리면서 내부에서 css를 수정하면 반영이 안되는데

컴퓨터를 재부팅하거나 브라우저를 껐다 다시 켜봐도 안되고 그러다가 또 어느새인가 적용되어있는데

기준도 모르겠고 난감한 적이 있었다

 

해결

1.html에서 경로 지정 코드 확인

<link>태그에 잘못된 부분이 없는지 href속성에서 경로부분에 잘못된 곳이 없는지 확인

2.브라우저 캐시 삭제

브라우저에서 전에 사용하던 css 정보를 계속 가져다 쓰기 때문에 정보가 변경된 최신 내용이 반영이 안되고 있는 것

 

1)익스플로러 엣지

설정 - 검색에서 쿠키 검색 - 지울 항목 선택 - 삭제

 

2) 크롬

설정 - 개인정보 및 보안 - 쿠기 및 기타 사이트 데이터 - 모든 쿠기 및 사이트 데이터 보기 - 모두 삭제

 

3.html파일에서 css를 연결하는 link태그의 href속성에 css파일명 마지막에 ?after 붙이기

2번 방법은 임시방편적인거고 3번이 근본 원인해결에 가깝다. ?를 css파일명 뒤에 붙이므로써 브라우저에서 다른 css파일을 인식하게 하는 개념. ?after를 많이 쓰는데 다른 문자를 써도 상관없긴 하다

CSS 파일을 링크하는 HTML 파일(PHP, JSP)을 열어 기존 CSS 파일의 URL 뒤에 ?after를 붙이면 됩니다. 요지는 브라우저에서 다른 CSS 파일을 인식하게 하는 것이므로 물음표 뒤에 어떤 문자열을 붙여도 상관없습니다. 저는 예시로 after라는 문자열을 추가했습니다. CSS 파일을 변경한 뒤 ?문자열을 추가하면 바로 변경사항이 적용되는 모습을 확인할 수 있습니다.

 

728x90
반응형
728x90

 

처음보는거라 뭔가 문제가 있나해서 찾아보니

 

최근 이클립스랑 git 연동 시켰었는데 

Git이랑 연동 시, 아직 커밋해서 올리지 않아 모르는 파일이나 폴더에 ?물음표가 뜨는 것이었다

commit하면 사라진다

728x90
반응형
728x90

 

 Statement & PreparedStatement차이 

1) Statement

완성된 쿼리라 손 볼 필요 x 따라서 보낼 때 한번에 쿼리만 전달하면 됨
                 ex)conn.createStatement();


 2)PreparedStatement

미완성 쿼리 . 비워져있는 부분을 채울 것임. 공간을 확보에 해놓은 것. 미완성 쿼리보내면 에러나기에 채워줘야함. 위치홀더 때문에 미완성된 쿼리라 비어있는 값을 채우기 위해 String query를 집어 넣고서 만든다
                 ex)conn.prepareStatement(query);

쿼리에  동적인 값이 많다면,  PreparedStatement가 유리. 코드가 짧아짐

 

 

model.DAO

// 메뉴2.사번으로 사원 정보 조회
	public int insertEmployee(Employee e) {		// return타입 변경 : void to int
		Connection conn = null;
		PreparedStatement pstmt = null;
		int result = 0;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","SCOTT","qrwe");
//			conn.setAutoCommit(false); 		// 18c버젼에 추가해야하는 코드
			// 1) Statement 방식 쿼리문
			String query = "INSERT INTO EMP VALUES(" + e.getEmpNo() + ", "	// 완성된 쿼리이기에 -> Statement
													+ e.getEmpName() + ", "
													+ e.getJob() + ", "
													+ e.getMgr() + ", "
													+ "SYSDATE, "		    // 오늘 날짜 삽입
													+ e.getSal() + ", "
													+ e.getComnn() + ", "
													+ e.getDeptNo() + ") "; // 간단한 쿼리인데 자바로 옮겨쓰니 복잡해지고 길어짐.
			// Statement & PreparedStatement  둘 다 사용가능
			// 위의 쿼리처럼  동적인 값이 많다면,  PreparedStatement가 유리. 아래처럼 코드가 확 짧아짐
			
			// 2) PreparedStatement 방식 쿼리문
			String query2 = "INSERT INTO EMP VALUES(?, ?, ?, ?, SYSDATE, ? ,? ,?)"; // 
			pstmt = conn.prepareStatement(query2);
			pstmt.setInt(1, e.getEmpNo());
			pstmt.setString(2, e.getEmpName());
			pstmt.setString(3, e.getJob());
			pstmt.setInt(4, e.getMgr());
			pstmt.setInt(5, e.getSal());
			pstmt.setInt(6, e.getComnn());
			pstmt.setInt(7, e.getDeptNo());
			
			result = pstmt.executeUpdate(); // DML(insert,update,delete)문이라 executeUpdate():int 사용
			// 위의 conn.prepareStatement(query2); 이미 쿼리문을 보냈기 때문에 executeUpdate()안에 인자 필요x
			
			// 트랜젝션 처리
			// commit할지 rollback할지
			if(result > 0) {
				conn.commit();
			}else {
				conn.rollback();
			}
			
			
		} catch (ClassNotFoundException e1) {
			e1.printStackTrace();
		} catch (SQLException e1) {
			e1.printStackTrace();
		} finally {
			try {
				pstmt.close();
				conn.close();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}

		}
		
		return result;	// insertEmployee()의 반환타입 void to int로 변경
		
		// dml 삽입완료. 데이터 확정지을지 취소할지(커밋할지 말지) 정해야함.  
		
	}

 

728x90
반응형

+ Recent posts