- 오라클
-- 테이블 삭제
DROP TABLE T_MEMBER;
-- 회원테이블 생성
CREATE TABLE T_MEMBER(
U_ID VARCHAR2(10) PRIMARY KEY,
PWD VARCHAR2(10),
U_NAME VARCHAR2(50),
EMAIL VARCHAR2(50),
JOINDATE DATE DEFAULT SYSDATE
);
-- PRIMARY KEY : 기본키
-- VARCHAR2(10) : 문자열 자료형, 길이10(영문10자, 한글3자)
-- DATE : 날짜 자료형,
-- DEFAULT SYSDATE : 날짜를 입력하지않으면 현재 시각으로 설정
-- 데이터 넣을때 두가지 방법
-- 1번 방법
INSERT INTO T_MEMBER
VALUES('hong', '1212', '홍길동', 'hong@gmail',sysdate);
INSERT INTO T_MEMBER
VALUES('lee', '1212', '이순신', 'lee@gmail',sysdate);
INSERT INTO T_MEMBER
VALUES('kim', '1212', '김유신', 'kim@gmail',sysdate);
-- 2번 방법
INSERT INTO T_MEMBER(U_ID, PWD, U_NAME, EMAIL)
VALUES('hong', '1212', '홍길동', 'hong@gmail');
INSERT INTO T_MEMBER(U_ID, PWD, U_NAME, EMAIL)
VALUES('lee', '1212', '이순신', 'lee@gmail');
INSERT INTO T_MEMBER(U_ID, PWD, U_NAME, EMAIL)
VALUES('kim', '1212', '김유신', 'kim@gmail');
INSERT INTO T_MEMBER(U_ID, PWD, U_NAME, EMAIL)
VALUES('ppo', '1212', '뽀꾸', 'ppoggu@gmail');
-- 테이블의 모든 정보 보고 싶을때
SELECT * FROM T_MEMBER;
-- 원하는 정보만 보고 싶을때
SELECT U_ID, U_NAME FROM T_MEMBER;
COMMIT;
실행할 코드 위에서 ctrl + enter 누르면 실행됨 ( 나는 2번으로 만듬)
INSERT INTO 부분은 드레그해서 선택한다음 ctrl + enter 하도록,
테이블 볼려면 왼쪽 테이블(필터링됨) 안에 있는 테이블 이름 클릭
INSERT 부터 VALUES 까지 드래그 한다음 ctrl +enter 로 삽입하고
SELECT로 테이블에 들어가있는지 확인하고
COMMIT 해줌.
혹시 문제가 생기면 DROP TABLE로 삭제 하면 된다.
- 오라클 데이터베이스와 연동하는데 필요한 드라이버 다운받기
jar 파일 받기
C:\devTools\jar 경로에 저장해둠
- src/main/java에 패키지 sec01.ex01 만들고 클래스 MemberDao 만듬
- 그리고 아래 작업을 해준다.
WEB-INF 안에 lib 안에 다운받은 ojdbc.jar 복사해서 넣어둔다
alt + enter 눌러서 java build path에서 Libraries 탭선택하고 오른쪽에 Add jar 선택해서
ojdbc6 찾아서 등록
package sec01.ex01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MemberDao {
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
private static final String USER = "scott";
private static final String PWD = "tiger";
private Connection con; // 오라클에 연동하는데 필요한 객체 //1
private PreparedStatement pstmt; // 데이터베이스에 쿼리문 전달 //2
public List<MemberVO> listMembers() { //4
List<MemberVO> list = new ArrayList<>();
connDB();
String query = "SELECT * FROM T_MEMBER";
try {
pstmt = con.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
// @param : 테이블 컬럼(열) 이름
// String uId = rs.getString("u_id");
// String pwd = rs.getString("pwd");
// String uName = rs.getString("u_name");
// String email = rs.getString("email");
// Date date = rs.getDate("joindate");
// 변수 없이 바로 넣으면 코드 줄일수 있음
MemberVO vo = new MemberVO(
rs.getString("u_id"),
rs.getString("pwd"),
rs.getString("u_name"),
rs.getString("email"),
rs.getDate("joindate"));
list.add(vo); // 리스트에 추가
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
private void connDB() { //3
try {
Class.forName(DRIVER); // OracleDriver 객체 생성
// 커넥션 객체를 얻음
con = DriverManager.getConnection(URL, USER, PWD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
예외 나는것은 try catch로 묶어줬음.
- MemberVO 클래스 생성
오라클 테이블을 보고 MemberVO에 필드 코드 입력하고
get, set, toString 만들어줌
package sec01.ex01;
import java.sql.Date;
public class MemberVO {
private String uId;
private String pwd;
private String uName;
private String email;
private Date date;
public MemberVO(String uId, String pwd, String uName, String email, Date date) {
this.uId = uId;
this.pwd = pwd;
this.uName = uName;
this.email = email;
this.date = date;
}
public String getuId() {
return uId;
}
public void setuId(String uId) {
this.uId = uId;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "MemberVO [uId=" + uId + ", pwd=" + pwd + ", uName=" + uName + ", email=" + email + ", date=" + date
+ "]";
}
}
이클립스 콘솔창 확인해서 테이블 정보들 다 담기면 된다.
- 서블릿(MemberServlet) 생성
package sec01.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/member")
public class MemberServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
MemberDao dao = new MemberDao();
List<MemberVO> listMembers = dao.listMembers();
out.print("<table border=1><tr>");
out.print("<th>아이디</th>");
out.print("<th>비밀번호</th>");
out.print("<th>이름</th>");
out.print("<th>이메일</th>");
out.print("<th>가입일</th></tr> ");
// 반복구간
for(MemberVO vo : listMembers) {
// String id = vo.getuId();
// String pw = vo.getPwd();
// String name = vo.getuName();
// String email = vo.getEmail();
// Date date = vo.getDate();
// 변수 없이 바로 넣으면 코드를 줄일수 있다.
out.print("<tr><td>" + vo.getuId() + "</td>");
out.print("<td>" + vo.getPwd() + "</td><td>" + vo.getuName() + "</td>");
out.print("<td>" + vo.getEmail() + "</td>");
out.print("<td>" + vo.getDate() + "</td></tr>");
}
}
}
브라우저 확인하기.
- DataSource 이용해 데이터베이스 연동하기
- 커넥션풀 : 미리 데이터베이스와 연결시킨 상태를 유지하는 기술
커넥션풀을 사용하기위해 tomcat-dbcp파일을 lib 폴더에 넣고
자바 빌드패스에서 Add JARs 눌러 추가해주기
메이븐 저장소에서 받아준다.
앞서 했던 오라클 데이터베이스 연동 드라이버 설정과 똑같이 하면됨.
server 폴더에 context.xml에 해당 위치에 다음 코드를 작성해준다.
<Resource
name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:XE"
username="scott"
password="tiger"
maxActive="50"
maxWait="-1" />
- 커넥션풀 설정 하고 코드 변화
package sec01.ex01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class MemberDao {
// private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
// private static final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
// private static final String USER = "scott";
// private static final String PWD = "tiger";
private DataSource dataSource; // 커넥션풀 설정 추가
private Connection con; // 오라클에 연동하는데 필요한 객체 //1
private PreparedStatement pstmt; // 데이터베이스에 쿼리문 전달 //2
public MemberDao() { // 커넥션풀 설정 추가
try {
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");
dataSource = (DataSource) envContext.lookup("jdbc/oracle");
} catch (NamingException e) {
e.printStackTrace();
}
}
public List<MemberVO> listMembers() { //4
List<MemberVO> list = new ArrayList<>();
// connDB();
String query = "SELECT * FROM T_MEMBER";
try {
con = dataSource.getConnection(); // 커넥션풀 설정 추가
pstmt = con.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
MemberVO vo = new MemberVO(
rs.getString("u_id"),
rs.getString("pwd"),
rs.getString("u_name"),
rs.getString("email"),
rs.getDate("joindate"));
list.add(vo);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
// private void connDB() { //3
// try {
// Class.forName(DRIVER); // OracleDriver 객체 생성
// // 커넥션 객체를 얻음
// con = DriverManager.getConnection(URL, USER, PWD);
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
}
주석 친 코드들은 커넥션풀 설정으로 필요 없게 됐고,
// 커넥션풀 설정 추가 라고 적힌 코드들이 추가 되었다.
'학습 > JSP' 카테고리의 다른 글
9. 포워드 (0) | 2022.11.07 |
---|---|
8. 데이터베이스 데이터 조회, 추가, 삭제 (0) | 2022.11.04 |
6. 서블릿 (서블릿으로 요청 시 구구단 출력하기) (0) | 2022.11.02 |
5. 서블릿 (POST 방식, 자바스크립트로 서블릿에 요청, 로그인 요청시 유효성 검사하기) (0) | 2022.11.02 |
4. 서블릿(form태그 이용 서블릿에 요청, 환율 계산기) (0) | 2022.11.01 |
댓글