열심히 끝까지
디바이스 융합 자바(Java) day39 - DB를 jsp에 연동 본문
[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>