열심히 끝까지

디바이스 융합 자바(Java) day39 - DB를 jsp에 연동 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)

디바이스 융합 자바(Java) day39 - DB를 jsp에 연동

노유림 2022. 8. 4. 17:08

[JSP]

.java(서블릿) ☆
기본문법
내장객체(scope)
자바빈즈->useBean 액션
             <input type="text" name="uname"
                                       id="uname"> << css때는 id 사용하지만 jsp에서는 사용 안함

[오늘 수업]
JDBC

 

[MYSQL]의 경우...
ORACLE은 A라는 테이블을 만들면 다른 사람들은 못만들지만
MYSQL은 A라는 테이블을 만들어도 또 만들 수 있음
SELECT*FROM USER_TABLE == SHOW TABLE()

---------------------------------------------------------
>> 분명 에러가 났는데 왜.. 그냥 넘어간거지?
    > 이유는 catch(Exception e)로 잡아서 그런 것

>> 우선 properties에 ojdbc.jar 파일 넣어주고
     현재 
     C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib
     D:\내학습파일\resource\apache-tomcat-9.0.64-windows-x64\apache-tomcat-9.0.64\lib
     파일 전부에 ojdbc.jar 파일을 각각 넣어줌
 >> 나중에 진행할 때, 각 파일의 외부파일로 ojdbc.jar 파일을 넣어주면 됨
 

 

==예시==

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<%
	// 상단에 util 배치
	Connection conn=null;
	PreparedStatement pstmt=null;
	
	final String driverName = "oracle.jdbc.driver.OracleDriver";
	final String url = "jdbc:oracle:thin:@localhost:1521:xe";
	final String user = "ryo";
	final String passwd = "1234";
	
	try{
		Class.forName(driverName); // 드라이브 연결
		conn=DriverManager.getConnection(url, user, passwd); // 연결 확보
		String sql_insert="INSERT INTO MEBER VALUE((SELECT NVL(MAX(MPK),0)+1 FROM MEMBER),?,?)";
		pstmt=conn.prepareStatement(sql_insert);
		pstmt.setString(1,request.getParameter("name"));
		pstmt.setInt(2, Integer.parseInt(request.getParameter("score")));
		pstmt.executeUpdate();
		
	}catch(Exception e){
		e.printStackTrace();
	}

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>데이터 등록</title>
</head>
<body>

<form action="NewFile.jsp" method="post">
이름:<input type="text" name="name"><br>
점수:<input type="number" min="0" max="100" name="score"><br>
<input type="submit" value="데이터 등록하기">
</form>
<hr>
<h2>데이터 목록</h2>
<%
    // DAO 작업 
    // 자바 빈즈로 작업하면 편함
    try{
		String sql_selectAll="SELECT * FROM MEMBER"; // 불러오기
		pstmt=conn.prepareStatement(sql_selectAll);
		ResultSet rs=pstmt.executeQuery();
		while(rs.next()){
			out.print(rs.getInt("MPK")+". "+rs.getString("NAME")+" "+rs.getInt("SCORE")+"점 <BR>");
	}
		rs.close();
		pstmt.close();
		conn.close();
    } catch(Exception e){
    	e.printStackTrace();
    } 

%>

</body>
</html>

---------------------------------

이 상황에서 다음과 같은 항목에 대해 생각해보자..

 

1. 에러가 발생할까?
    >>  try-catch 때문에 웹에서는 문제없이 페이지를 볼 수는 있음


2. 문제-1
    >> NumberFormatException
         :   insert()진행할 데이터가 최초에는 존재하지 않음


3. 문제-2
   >> 인코딩 이슈

 

>> 해결하고 난 후의 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<%
	request.setCharacterEncoding("UTF-8");// 인코딩
	// 상단에 util 배치
	Connection conn=null;
	PreparedStatement pstmt=null;
	
	final String driverName = "oracle.jdbc.driver.OracleDriver";
	final String url = "jdbc:oracle:thin:@localhost:1521:xe";
	final String user = "ryo";
	final String passwd = "1234";
	
	try{
		Class.forName(driverName); // 드라이브 연결
		conn=DriverManager.getConnection(url, user, passwd); // 연결 확보
		if(request.getMethod().equals("POST")){// 요청이 post로 들어오면
		String sql_insert="INSERT INTO MEMBER VALUES((SELECT NVL(MAX(MPK),0)+1 FROM MEMBER),?,?)";
		pstmt=conn.prepareStatement(sql_insert);
		pstmt.setString(1,request.getParameter("name"));
		pstmt.setInt(2, Integer.parseInt(request.getParameter("score")));
		pstmt.executeUpdate();
		}
	}catch(Exception e){
		e.printStackTrace();
	}

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>데이터 등록</title>
</head>
<body>

<form action="NewFile.jsp" method="post">
이름:<input type="text" name="name"><br>
점수:<input type="number" min="0" max="100" name="score"><br>
<input type="submit" value="데이터 등록하기">
</form>
<hr>
<h2>데이터 목록</h2>
<%
    // DAO 작업 
    // 자바 빈즈로 작업하면 편함
    
    try{
		String sql_selectAll="SELECT * FROM MEMBER"; // 불러오기
		pstmt=conn.prepareStatement(sql_selectAll);
		ResultSet rs=pstmt.executeQuery();
		while(rs.next()){
			out.print(rs.getInt("MPK")+". "+rs.getString("NAME")+" "+rs.getInt("SCORE")+"점 <BR>");
	}
		rs.close();
		pstmt.close();
		conn.close();
    } catch(Exception e){
    	e.printStackTrace();
    } 
	


%>

</body>
</html>