01.db client 및 jdbc
DB클라이언트 프로그램
연결/인증
문장실행
결과패치 오라클
사용자 SQL
둘이 함수가 다르다 연결하기 힘들다----->등장 JDBC
연결/인증
문장실행
결과패치
MS SQL
JDBC(통역기의 역할) JDBC을 쓰면 연결이 쉽다- 연결이 단일화하기 쉽다
순서
1.드라이버 로드하기
JDBC를 이용하는 자바 코드
1-1Class.forName("oracle.jdbc.driver.OracleDriver");
메모리상에 드라이버가 올라감
1-2. Connection con = DriverManager.getConnection(...);
연결이라는 것이 일어나고 확립이 되면 객체가 반환된다(연결객체)
1-3.Statement st =con.createStatement();
사용자로부터 요구받은 쿼리를 실행하게 된다
1-4.Resultset rs = st.executeQuery(sql);
레코드집합(결과집합)들이 나온다
결과집합은 서버에 있고 클라이언트는 하나씩 받게 된다(한번에 못받음)
결과집합:쿼리문을 실행했을 때 나오는 결과 집합들
서버쪽에서 클라이언트에게 주기 위해 커서가 있는데 레코드를 가르치는 포인트이다
커서가 준비되면 클라이언트 row가 Resultset이라고 준비된다(결과집합을 이용)
결과집합을 담을 빈그릇이 필요하다
1-5.rs.next(); 주세요- 패치 -> 앞머리로 커서가 가르킨다(Before of File-Bof)
호출되어야 클라이언트에게 레코드하나를 전달된것이다
1-6.String title = rs.getString("title");title
컬럼에 대한것을 문자열로 주세요 그릇에서 문자열을 뽑아오게 된다
끝까지 가게되면 그상태 위치를 End of File(End of File) 이라고 한다
무조건 같은 코드 세트세트
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(...);
Statement st =con.createStatement();
Resultset rs = st.executeQuery(sql);
rs.close();
st.close();
con.close();
2.연결 생성하기
package ex1;
import java.beans.Statement;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
public class Program {
public static void main(String[] args) throws SQLException, ClassNotFoundException{
// try {
// Class.forName("oracle.jdbc.driver.OracleDriver");
// System.out.println("드라이버 검색 성공");
// } catch (ClassNotFoundException e) {
// System.err.println("드라이버 검색 실패");
// System.exit(0);
// }
//
// //데이터베이스 연결 - 커넥션 만들기
// Connection conn = null;
// try {
// conn = DriverManager.getConnection(
// "jdbc:oracle:thin:@localhost:1521:orcl"
// ,"eunji", "1234"
//
// );
// System.out.println("데이터베이스 연결 성공");
// } catch (SQLException e) {
// System.err.println("데이터베이스 연결 실패");
// System.exit(0);
// }
// try {
// if(conn != null) {
// conn.close();
// }
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
//}
String url ="jdbc:oracle:thin:@localhost:1521/orcl";
String sql = "SELECT*FROM NOTICE";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"eunji","1234");
Statement st =con.createStatement();
ResultSet rs = st.executeQuery(sql);
// //next에서
while(rs.next()) {
int id = rs.getInt("ID");
String title = rs.getString("TITLE");
String writerld = rs.getString("WRITER_ID");
String content = rs.getString("CONTENT");
Date regDate=rs.getDate("REGDATE");
int hit = rs.getInt("hit");
System.out.printf("id:%d, title:%s, writerld%s,content:%s, regDate;%s, hit:%d\n",
id,title,writerld,regDate,content,hit);
}
rs.close();
st.close();
con.close();
}
}
id:1, title:JDBC란 무엇인가?, writerldnewlec,content:2022-06-14, regDate;aaa, hit:0
id:2, title:JDBC란 무엇인가?, writerldnewlec,content:2022-06-14, regDate;aaa, hit:0
id:3, title:JDBC란 무엇인가?, writerldnewlec,content:2022-06-14, regDate;aaa, hit:0
3.문장 생성하기
package ex1;
import java.beans.Statement;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
//
public class Program {
public static void main(String[] args) throws SQLException, ClassNotFoundException{
// try {
// Class.forName("oracle.jdbc.driver.OracleDriver");
// System.out.println("드라이버 검색 성공");
// } catch (ClassNotFoundException e) {
// System.err.println("드라이버 검색 실패");
// System.exit(0);
// }
//
// //데이터베이스 연결 - 커넥션 만들기
// Connection conn = null;
// try {
// conn = DriverManager.getConnection(
// "jdbc:oracle:thin:@localhost:1521:orcl"
// ,"eunji", "1234"
//
// );
// System.out.println("데이터베이스 연결 성공");
// } catch (SQLException e) {
// System.err.println("데이터베이스 연결 실패");
// System.exit(0);
// }
// try {
// if(conn != null) {
// conn.close();
// }
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
//}
String url ="jdbc:oracle:thin:@localhost:1521/orcl";
String sql = "SELECT*FROM NOTICE";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"eunji","1234");
java.sql.Statement st =con.createStatement();
ResultSet rs = st.executeQuery(sql);
//next에서 결과집합 반환하기
while(rs.next()) {
int id = rs.getInt("ID");
String title = rs.getString("TITLE");
String writerld = rs.getString("WRITER_ID");
String content = rs.getString("CONTENT");
Date regDate=rs.getDate("REGDATE");
int hit = rs.getInt("hit");
// if(hit>10) -> 오류 발생
String sql = "SELECT * FROM NOTICE WHERE HIT>10";
//셀렉트에는 옵션이 있어서 hit가 10개이상인 기능을 하는 필터링 기능을 한다 위의 조건이 필터링을 하게 되면 글이 많아질때 반복이 계속 돌아간다
//시퀄서버(sql 서버)는 데이터 공장
System.out.printf("id:%d, title:%s, writerld%s,content:%s, regDate;%s, hit:%d\n",
id,title,writerld,regDate,content,hit);
}
rs.close();
st.close();
con.close();
}
}
- 게시글을 필터링 해야하는 경우
데이터 필터링,정렬,그룹화,등의 모든데이터연산은 데이터베이스에서 처리한다
자바: UI레이아웃만
데이터 가공처리: SQL이 한다
댓글남기기