JDBC
Java DataBase Connectivity
자바 프로그램이 DB와 연결하여 데이터를 교환할수 있게 해주는 프로그래밍 인터페이스
JDBC 프로그래밍 순서
1. JDBC 드라이버 로드
public static void initConnection() { // 초기화
try {
Class.forName("com.mysql.cj.jdbc.Driver"); // JDBC 드라이버 로딩
System.out.println("Driver Loading Success");
} catch (ClassNotFoundException e) {
System.out.println("DB Driver를 찾지 못했습니다");
e.printStackTrace();}}
메서드명 | 설명 |
Class.forName("드라이버") | 동적으로 JDBC 드라이브 클래스 로드 |
2. 데이터베이스에 연결
public static Connection getConnection() { // connection 객체를 반환
Connection conn = null;
try {// Connection 객체 생성
conn = DriverManager.getConnection("jdbc:mysql://192.168.45.150:3306/mydb", "root", "1234");
System.out.println("Connection Success");
} catch (SQLException e) {
System.out.println("db을 연결하지 못했습니다");
e.printStackTrace();
}
return conn;
}
메서드명 | 설명 |
DriverManager.getConnection(url, user, pwd) | DB연결을 위한 Connection 객체 생성 |
3. SQL 실행을 위한 객체 생성
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs=null;
4. SQL을 실행
- SELECT
String sql="SELECT id,name,age,joindate"+" from user" +" where id=? "; //SELECT
- INSERT
String sql ="INSERT INTO user(id,name,age,joindate)" + "values(?,?,?,now())"; //INSERT
- UPDATE
String sql="UPDATE user"+" set id=?,name=?,age=?,joindate=now() "+" where id=? "; //UPDATE
- DELETE
String sql="DELETE from user"+" where id=?"; //DELETE
5. SQL 실행결과를 받아서 처리
- SELECT
try {
conn=DBConnection.getConnection();
psmt= conn.prepareStatement(sql);
psmt.setString(1, id); // ? 첫번 째 인자에 값(id) 넣기
rs= psmt.executeQuery(); //select문만 query를 쓴다. 결과값을 rs에 저장
if(rs.next()) { //결과값이 있을 때
String _id=rs.getString("id");
String _name=rs.getString("name");
String _joindate=rs.getString("joindate");
int _age=rs.getInt("age");
user= new User(_id,_name,_age,_joindate);
}
} catch (SQLException e) {
e.printStackTrace();
}
- INSERT
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setString(1, id);
psmt.setString(2, name);
psmt.setInt(3,age);
count = psmt.executeUpdate();
System.out.println("성공적으로 추가되었습니다.");
} catch (SQLException e) {
System.out.println("추가되지 않았습니다.");
e.printStackTrace();
}
- UPDATE
try {
conn=DBConnection.getConnection();
psmt= conn.prepareStatement(sql);
psmt.setString(1, id);
psmt.setString(2, name);
psmt.setInt(3, age);
psmt.setString(4, num);
count= psmt.executeUpdate();
if(count>0) { //결과값이 있을 때
System.out.println("성공적으로 변경되었습니다.");
}
} catch (SQLException e) {
e.printStackTrace();
}
- DELETE
try {
conn=DBConnection.getConnection();
psmt= conn.prepareStatement(sql);
psmt.setString(1,id);
psmt.setString(1, id);
count= psmt.executeUpdate();
if(count>0){ //결과값이 있을 때
count = psmt.executeUpdate();
System.out.println("성공적으로 삭제되었습니다.");
}
} catch (SQLException e) {
e.printStackTrace();
}
6. 객체 및 DB 연결 종료
public static void close(Connection conn, java.sql.Statement psmt, ResultSet rs) {
try {
if (conn != null) { // db의 후처리
conn.close();
}
if (psmt != null) {
psmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
- try-catch문 이후 작성
finally {
DBClose.close(conn,psmt,rs);
}
java.sql 패키지의 주요 인터페이스
java.sql.Driver
- JDBC Driver 정보를 제공하는 인터페이스
- DBMS와의 연결을 관리하는 객체를 리턴한다.
java.sql.Connection
- 지정 DBMS와 연결을 수행해주는 인터페이스.
- DBMS에 SQL을 전달할 객체를 리턴한다.
java.sql.Statement
- SQL query 문을 DB에 전송해주는 인터페이스
- SQL을 MySQL 형식에 맞춰서 변환한 다음 서버에 보내는 일을 한다.
- 서버가 보낸 결과를 다룰 객체를 리턴한다.
메서드 | 설명 |
executeQuery() | SELECT 문에서만 실행 |
executeUpdate() | INSERT, UPDATE, DELETE 명령문에 실행 |
executeBatch() | 여러 개의 SQL을 실행 |
java.sql.PreparedStatement
- SQL query 문을 DB에 전송해주는 인터페이스
- 기존 Statement와 달리 쿼리에 인자를 부여하고 처음 컴파일된 이후에는 컴파일을 수행하지 않는다.
- 여러번 수행될때 속도가 빨라 Statement보다 PreparedStatement를 주로 사용
메서드명 | 설명 |
set[Type](nuber,value) | PreparedStatement 객체에 지정된 SQL문에 포함하고 있는 바인딩 변수 설정 |
java.sql.ResultSet
- DBMS 서버에서 SELECT를 실행한 후 생성된 결과를 가져오는 인터페이스
메서드 | 설명 |
boolean next() | 서버에서 한 개의 레코드를 가져온다 |
get[Type](val) | 서버에서 가져온 레코드의 컬럼 값을 가져온다. |
'멀티잇 풀스택' 카테고리의 다른 글
9 week 게시판 실습 (0) | 2023.02.15 |
---|---|
8 week_6 MVC 패턴 (0) | 2023.02.10 |
8 week_4 Ajax (0) | 2023.02.08 |
8 week_3 Java_HashMap (0) | 2023.02.08 |
8 week_2 JSP (0) | 2023.02.07 |