MS-SQL 과 JAVA 및 JSP 연동하기
sqljdbc4.jar 을 다운로드 받아서 JAVA 설치 폴더\jre\lib\ext 에 넣어주고 CLASSPATH 를 설정해준다.
4.0 부터는 Class.forName 을 하지 않는다.
JDBC를 사용한 JSP와 데이터베이스 연동 예제
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import = "java.sql.*" %>
<%
Connection conn = null;
String sql = null;
PreparedStatement pstmt = null;
try
{
String url1 = "jdbc:sqlserver://localhost:1433;databaseName=test;user=sa;password=****;";
conn = DriverManager.getConnection(url1);
out.println("제대로 연결되었습니다");
}
catch(Exception e)
{
out.println("제대로 연결이 안 되었습니다");
e.printStackTrace();
}
%>
JDBC 프로그램의 작성 단계
JDBC 프로그램은 다음과 같은 단계에 의해서 프로그래밍 된다.
Package Import -> JDBC 드라이버 Load -> Connection 객체 생성 -> Statement 객체 생성 -> Query 수행 -> Resultest 객체로부터 데이터 추출 -> Resultest Close -> Statement 객체 Close -> Connection 객체 Close
1 단계 (JDBC 드라이버 Load)
인터페이스 드라이버를 구현 하는 작업으로, Class의 forName() 메소드를 사용해서 드라이버를 로드 한다. forName(String className) 메소드는 문자열로 주어진 클래스나 인터페이스 이름을 객체로 리턴한다.
MySQL 드라이버 로딩
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver");
오라클 8i 또는 9i thin 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("oracle.jdbc.driver.OracleDriver");
MS-SQL 자바 1.6 이상에서 드라이버 4.0 설치시 1 단계 건너 뜀
Class.forName("com.mysql.jdbc.Driver")은 드라이버들이 읽히기만 하면 자동 객체가 생성되고 DriverManager에 등록된다.
2 단계 (Connection 객체 생성)
Connection 객체를 연결하는 것으로 DriverManager 에 등록된 각 드라이버들을 getConnection(String url) 메소드를 사용해서 식별한다. 이 때 url 식별자와 동일한 것을 찾아서 매핑한다. 찾지 못하면 no suitable error 가 발생한다.
MySQL 사용시
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "test", "1234");
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "test", "1234");
오라클 사용시
Connection conn =
DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test", "test", "1234");
Connection conn =
DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test", "test", "1234");
MS-SQL 사용시
Connection conn =
DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=test", "test", "1234");
Connection conn =
DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=test", "test", "1234");
3 단계 (Statement/PreparedStatement/CallableStatement 객체 생성)
SQL 쿼리를 생성, 실행하며, 반환된 결과를 가져오게 할 작업 영역을 제공한다 .Statement 객체는 Connection 객체의 createStatement() 메소드를 사용하여 생성한다.
Statement stmt = conn.createStatement();
4 단계 (Query 수행)
Statement 객체가 생성되면 Statement 객체의 executeQuery() executeUpdate() 메소드를 사용해서 쿼리를 처리한다.
- stmt.executeQuery : recordSet 반환
select 문
ResultSet rs = stmt.executeQuery("select * from 직급");
ResultSet rs = stmt.executeQuery("select * from 직급");
- stmt.executeUpdate(); 성공한 row 수 반환
Insert문, Update문, Delete문
String sql = "update member1 set passwd='1234' where id ='123'";
stmt.executeUpdate(sql);
String sql = "update member1 set passwd='1234' where id ='123'";
stmt.executeUpdate(sql);
5단계 (ResultSet 처리)
executeQuery() 메소드는 결과로 ResultSet을 반환한다. 5단계는 이 ResultSet 으로부터 원하는 데이터를 추출하는 과정이다. 데이터를 추출하는 방법은 ResultSet 에서 한 행씩 이동하면서 getXxx()를 이용해서 원하는 필드 값을 추출하는데 이 때 rs.getString("name") 혹은 rs.getString(1)로 사용한다. 여기에서 한 가지 주의할 사항은 자바 계열에서 ResultSet의 첫 번째 필드는 1부터 시작한다. rs.getString("name")과 rs.getString(1) 둘 중 권장사항은 전자와 같이 필드명을 사용하는 것이다. 한 행을 처리하고 다음행으로 이동시 next() 메소드를 사용한다.
while(rs.next())
{
out.println(rs.getString("id"));
out.println(rs.getString("passwd"));
}
{
out.println(rs.getString("id"));
out.println(rs.getString("passwd"));
}
JSP 페이지에서 member1 테이블에 레코드 삽입 예제
▼insertTestForm.jsp
<%@ page contentType="text/html; charset=euc-kr"%>
<html>
<head> <title> 레코드 삽입 </title> </head>
<body>
<h2> member1 데이블에 레코드삽입 </h2>
<form method="post" action="insertTest.jsp">
아이디 : <input type="text" name="id"> <p>
패스워드 : <input type="password" name="passwd"> <p>
이름 : <input type="text" name="name"> <p>
<input type="submit" value="보내기">
</form>
</body>
</html>
▼insertTest.jsp
<%@ page contentType="text/html; charset=euc-kr"%>
<%@ page import="java.sql.*" %>
<%
request.setCharacterEncoding("euc-kr");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
Connection conn = null;
PreparedStatement pstmt = null;
try
{
String jdbcUrl = "jdbc:sqlserver://localhost:1433;databaseName=test;user=sa;password=1234;";
conn = DriverManager.getConnection(jdbcUrl);
String sql = "insert into member1(id, pass, name) values(?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setString(2,passwd);
pstmt.setString(3,name);
pstmt.executeUpdate();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if(conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
<html>
<head> <title> 레코드 삽입 </title> </head>
<body>
member1 테이블에 새로운 레코드를 삽입 했습니다.
</body>
</html>
JSP 페이지에서 테이블에 저장된 레코드들을 화면에 표시하는 예제
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.sql.*" %>
<html>
<head> <title> 테이블 </title> </head>
<body>
<h2> member1 테이블의 레코드 </h2>
<table width="550" border="1">
<tr>
<td width="100"> 아이디 </td>
<td width="100"> 패스위드 </td>
<td width="100"> 이름 </td>
<td width="250"> 가입일자 </td>
</tr>
<%
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
String jdbcUrl = "jdbc:sqlserver://localhost:1433;databaseName=test;user=sa;password=1234;";
conn=DriverManager.getConnection(jdbcUrl);
String sql = "select * from member1";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next())
{
String id = rs.getString("id");
String passwd = rs.getString("pass");
String name = rs.getString("name");
String time = rs.getString("time");
%>
<tr>
<td width="100"> <%=id%> </td>
<td width="100"> <%=passwd%> </td>
<td width="100"> <%=name%> </td>
<td width="250"> <%=time%> </td>
</tr>
<%
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if(rs != null)
try{rs.close();}catch(SQLException sqle){}
if(pstmt != null)
try{pstmt.close();}catch(SQLException sqle){}
if(conn != null)
try{conn.close();}catch(SQLException sqle){}
}
%>
</table>
</body>
</html>
JSP 페이지에서 member1 페이블에 저장된 레코드 수정 예제
▼ updateTestForm.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<html>
<head> <title> 레코드 수정예제 </title> </head>
<body>
<h2> member1 테이블의 레코드 수정 </h2>
<form method="post" action="updateTest.jsp">
아이디 : <input type="text" name="id"> <p>
패스워드 : <input type="password" name="passwd"> <p>
변경할 이름 : <input type="text" name="name"> <p>
<input type="submit" value="보내기">
</form>
</body>
</html>
▼updateTest.jsp
<%@ page contentType="text/html; cahrset=euc-kr"%>
<%@ page import = "java.sql.*" %>
<%
request.setCharacterEncoding("euc-kr");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
String jdbcUrl = "jdbc:sqlserver://localhost:1433;databaseName=test;user=sa;password=1234;";
conn = DriverManager.getConnection(jdbcUrl);
String sql = "select id, pass from member1 where id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if( rs.next() )
{
String rId= rs.getString("id");
String rPasswd = rs.getString("pass");
if ( id.equals(rId) && passwd.equals(rPasswd) )
{
sql = "update member1 set name = ? where id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.setString(2,id);
pstmt.executeUpdate();
%>
<html>
<head> <title> 레코드 수정 </title> </head>
<body>
member1 테이블의 레코드를 수정했습니다.
</body>
</html>
<%
}
else
out.println("패스워드가 틀렸습니다.");
}
else
out.println("아이디가 틀렸습니다.");
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if( rs != null) try{rs.close();}catch(SQLException sqle){}
if( pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if( conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
jsp 페이지에서 member1 테이블에 저장된 레코드 삭제
▼ deleteTestForm.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<html>
<head> <title> 레코드 삭제 </title> </head>
<body>
<h2> memeber1 데이블의 레코드 삭제 </h2>
<form method="post" action="deleteTest.jsp">
아이디 : <input type="text" name="id"> <p>
패스워드 : <input type="password" name="passwd"> <p>
<input type="submit" value="보내기">
</form>
</body>
</html>
▼ deleteTest.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import ="java.sql.*" %>
<%
request.setCharacterEncoding("euc-kr");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
String jdbcUrl =
"jdbc:sqlserver://localhost:1433;databaseName=test;user=sa;password=1234;";
conn = DriverManager.getConnection(jdbcUrl);
String sql = "select id, pass from member1 where id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if( rs.next() )
{
String rPasswd = rs.getString("pass");
if(passwd.equals(rPasswd))
{
sql = "delete from member1 where id = ? and pass = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setString(2,passwd);
pstmt.executeUpdate();
%>
<html>
<head> <title> 레코드 삭제 </title> </head>
<body>
member1 테이블의 레코드를 삭제했습니다.
</body>
</html>
<%
}
else
out.println("패스워드가 틀렸습니다.");
}
else
out.println("아이디가 존재하지 않습니다.");
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if( rs != null) try{rs.close();}catch(SQLException sqle){}
if( pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
if( conn != null) try{conn.close();}catch(SQLException sqle){}
}
%>
'Java 관련 > JSP,Servlet' 카테고리의 다른 글
[JSP] response 내장 객체 (0) | 2019.07.17 |
---|---|
[JSP] request 내장 객체 (0) | 2019.07.17 |
[JSP] JSP 페이지의 내장 객체 (0) | 2019.07.17 |
[JSP] include 디렉티브 <%@include %> (0) | 2019.07.17 |
[JSP] out 내장 객체 (0) | 2019.07.17 |
[JSP] page 디렉티브 <%@ page %> (0) | 2019.07.17 |
[JSP] 웹에서 세션(session)의 사용 (0) | 2019.01.03 |
Windows에서 JSP와 MSSQL JDBC 연결하기 (1) | 2018.12.18 |