Class.forName("org.mariadb.jdbc.Driver"); // MariaDB JDBC 드라이버 로드
Connection conn = DriverManager.getConnection("jdbc:mariadb://localhost:3306/mydatabase", "username", "password");
// 데이터베이스에 연결
String sql = "SELECT * FROM mytable WHERE id = ?";
PreparedStatement pstm = conn.prepareStatement(sql);
// PrepareStatement 객체를 사용하여 SQL 문을 준비합니다. ?는 매개 변수를 나타냅니다.
pstm.setInt(1, 10); // 첫 번째 매개 변수에 값 10을 바인딩합니다.
ResultSet rs = pstm.executeQuery();
// SQL 문을 실행하여 결과 집합을 가져옵니다.
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
// 결과 집합의 열 값을 가져옵니다.
// 열 이름을 사용하여 열 값을 가져올 수 있습니다.
System.out.println("ID: " + id + ", Name: " + name);
}
rs.close(); // ResultSet 객체를 닫습니다.
pstm.close(); // PreparedStatement 객체를 닫습니다.
conn.close(); // Connection 객체를 닫습니다.
Statement와 Prepared Statement 차이점 ( SQL문을 실행할 수 있는 객체 )
Statement
SQL 문을 실행할 때마다 전체 SQL 문을 데이터베이스로 보내고 컴파일합니다. 실행 시마다 SQL 문이 파싱되고 최적화
// Statement를 사용한 INSERT 쿼리 실행
Statement stmt = conn.createStatement();
String insertQuery = "INSERT INTO mytable (id, name) VALUES (1, 'John')";
int rowsAffected = stmt.executeUpdate(insertQuery);
Prepared Statemen
SQL 문을 한 번 준비(prepare)한 후, 나중에 매개 변수와 함께 반복해서 실행할 수 있습니다. SQL 문이 데이터베이스로 보내지고 컴파일되는 단계를 한 번만 수행
1, 2 쿼리문 순서대로 입력
// PreparedStatement를 사용한 INSERT 쿼리 실행
String insertQuery = "INSERT INTO mytable (id, name) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(insertQuery);
pstmt.setInt(1, 1);
pstmt.setString(2, "John");
int rowsAffected = pstmt.executeUpdate();
executeQuery()와 executeUpdate()
JDBC에서 사용되는 두 가지 메서드
데이터베이스와 상호작용할 때 주로 사용
executeQuery()
SELECT 문을 실행하여 결과 집합(ResultSet)을 반환하는 데 사용
SELECT 문은 데이터베이스에서 데이터를 조회하는 데 사용되며, 결과 집합에는 조회된 데이터가 포함된다.
반환 값: ResultSet 객체. 결과 집합을 포함하고 있으며, 조회한 데이터에 접근하기 위해 사용
String sql = "SELECT * FROM users";
Statement stmt = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
// 결과 집합에서 데이터를 읽고 처리하는 로직
}
executeUpdate()
INSERT, UPDATE, DELETE 등과 같은 데이터 변경 작업을 실행하는 데 사용
이러한 작업은 데이터베이스의 테이블에 행을 삽입, 업데이트, 삭제하는 데 사용
반환 값: int 타입. 영향을 받은 행의 수를 나타내며, INSERT, UPDATE, DELETE 문이 실행된 후 변경된 행의 수가 반환됨
String sql = "INSERT INTO users (name, age) VALUES ('John', 25)";
Statement stmt = connection.createStatement();
int affectedRows = statement.executeUpdate(sql);
System.out.println("영향을 받은 행의 수: " + affectedRows);
2. 월 평균 근무일 수 21.5일 하루 근무시간 8시간 / 하루 급여 / 시급 계산 출력
select empno, ename, trunc(sal / 21.5, 2) as day_pay,
round(sal/ 21.5 / 8, 1) time_pay
from emp
EMPNO ENAME DAY_PAY TIME_PAY ---------- ---------- ---------- ---------- 7839 KING 232.55 29.1 7698 BLAKE 132.55 16.6 7782 CLARK 113.95 14.2 7566 JONES 138.37 17.3 7788 SCOTT 139.53 17.4 7902 FORD 139.53 17.4 7369 SMITH 37.2 4.7 7499 ALLEN 74.41 9.3 7521 WARD 58.13 7.3 7654 MARTIN 58.13 7.3 7844 TURNER 69.76 8.7
EMPNO ENAME DAY_PAY TIME_PAY ---------- ---------- ---------- ---------- 7876 ADAMS 51.16 6.4 7900 JAMES 44.18 5.5 7934 MILLER 60.46 7.6
14개 행이 선택되었습니다.
3. 입사일 기준 3개월이 지난 후 첫 월요일에 정직원, 정직원 되는 날짜
4. 추가 수당 여부 ( 없으면 N/A )로 출력
select empno, ename, hiredate ,
to_char(next_day(add_months(hiredate, 3),'월'), 'YYYY-MM-DD') R_JOB,
nvl(to_char(comm), 'N/A') comm
from emp;
EMPNO ENAME HIREDATE R_JOB COMM ---------- ---------- ---------- ---------- ---------------------------------------- 7839 KING 1981/11/17 1982-02-22 N/A 7698 BLAKE 1981/05/01 1981-08-03 N/A 7782 CLARK 1981/06/09 1981-09-14 N/A 7566 JONES 1981/04/02 1981-07-06 N/A 7788 SCOTT 1987/07/13 1987-10-19 N/A 7902 FORD 1981/12/03 1982-03-08 N/A 7369 SMITH 1980/12/17 1981-03-23 N/A 7499 ALLEN 1981/02/20 1981-05-25 300 7521 WARD 1981/02/22 1981-05-25 500 7654 MARTIN 1981/09/28 1982-01-04 1400 7844 TURNER 1981/09/08 1981-12-14 0
EMPNO ENAME HIREDATE R_JOB COMM ---------- ---------- ---------- ---------- ---------------------------------------- 7876 ADAMS 0087/07/13 0087-10-15 N/A 7900 JAMES 1981/12/03 1982-03-08 N/A 7934 MILLER 1982/01/23 1982-04-26 N/A
14개 행이 선택되었습니다.
5. 직속 상관의 사원 번호를 기준에 맞게 바꿔서 출력
select empno, ename, mgr,
case
when mgr is null then '0000'
when substr(mgr,1,2) = 75 then '5555'
when substr(mgr,1,2) = 76 then '6666'
when substr(mgr,1,2) = 77 then '7777'
when substr(mgr,1,2) = 78 then '8888'
else to_char(mgr)
end as chg_mgr
from emp
EMPNO ENAME MGR CHG_MGR ---------- ---------- ---------- ---------------------------------------- 7839 KING 0000 7698 BLAKE 7839 8888 7782 CLARK 7839 8888 7566 JONES 7839 8888 7788 SCOTT 7566 5555 7902 FORD 7566 5555 7369 SMITH 7902 7902 7499 ALLEN 7698 6666 7521 WARD 7698 6666 7654 MARTIN 7698 6666 7844 TURNER 7698 6666
EMPNO ENAME MGR CHG_MGR ---------- ---------- ---------- ---------------------------------------- 7876 ADAMS 7788 7777 7900 JAMES 7698 6666 7934 MILLER 7782 7777
(2). HTML5월드와이드웹(WWW)을 통해 제공되는 정보를 나타낼 목적으로 사용되는 마크업 언어
1) 특징 : 플러그인의 설치 없이 동영상이나 음악을 웹브라우저상에서 재생 / 실시간으로 서버와 양방향 통신 가능
2) 시맨틱 요소 : 의미를 부여한 태그, 크롤링 / header, nav, aside, section(article), footer /
(3). CSS
1) 개념 : HTML과 함께 웹을 구성하는 기본 프로그래밍 요소 / 색상이나 크기, 이미지 크기나 위치, 배치방법 디자인요소
2) 특징 : 자바스크립트와 연계해 동적인 콘테츠 표현이나 디자인 적용 가능 / 다양한 기기에 맞는 반응형 웹 적용 가능
(4). JavaScript
1) 개념 : 모질라 재단의 프로토타입 기반의 프로그래밍언어로, 스크립트 언어에 해당 / 웹페이지가 동작하는 것을 담당
2) 특징 : 값에 따라 변수의 형변환이 자동으로 이루어지는 동적 형변환 ( var )
3) 프레임워크
React : 싱글 페이지 애플리케이션(SPA)이나 모바일에서 가능 / 페이스북에서 개발
View.js : Evan You에 의해 개발
Angular JS : 구글에서 개발
Ajax : 비동기적인 웹 애플리케이션의 제작을 위한 웹 개발 기법 ( 페이지가 껌뻑 거리는게 아니라 부분만 변경됨 )
2. UI 관련용어
웹 표준 ( 크롬, 엣지 등 ) => 웹 호환성 ( 하드웨어, 소프트웨어 환경이 다른 경우에도 공등한 서비스 ) =>
웹 접근성 (장애인 비장애인 ) => 반응형 웹 ( PC, 모바일 크기에 맞춰서 ) => 인포그래픽 (? 도움말, x닫기 시각화) =>
브랜드 아이덴티티(IBI)브랜드에 특화된 이미지 => 내비게이션( 웹 사이트 탐색 ) => 아코디언 ( 사용자가 원하는 정보만 선택적으로 볼 수 있게 접을 수있는 ) => 플레이스 홀더 ( 입력필드에 제공되는 간략한 텍스트 도움말 ) => 필터링 (원하는 데이터) => 입력 폼( 웹서버로 전송 ) => 입력 필드 ( 사용자 입력칸 ) => 썸네일 ( 커다란 이미지 축소 ) => 레이블 ( 이름표 )
대체 텍스트 ( 콘텐츠를 대신하기 위해 제공되는 텍스트 ) => 초점(Focus) 커서 껌뻑껌뻑