도메인 창에 홈디렉토리를 그대로 나타내지 않고 Context root로 나타냄
PreparedStatement.executeQuery() → SELECT문에서 사용
PreparedStatement.executeUpdate() → INSERT, UPDATE or DELETE문에서 사용
JDBC
DB연결
1. JDBC Driver 등록
JDBC Driver 클래스를 path에서 찾고, 메모리 로딩
→ 이 과정에서 JDBC Driver 클래스의 static 블록이 실행되면서 DriverManager에 JDBC객체를 등록하게됨
Class.forName("oracle.jdbc.OracleDriver");
2. 클래스를 찾지 못할경우 ClassNotFoundException 예외가 발생할 수 있기 때문에 예외처리 해야함
3. getConnection() 메소드로 DB와 연결
Connection conn = DriverManager.getConnection("연결 문자열", "사용자", "비밀번호")
// 연결문자열
// jdbc:oracle:thin:@IP주소:포트번호/DB명
4. 연결이 실패할 경우 SQLException이 발생하므로 예외처리를 해야함
[전체 코드]
package oracle;
import java.sql.*;
public class ConnectionExample {
public static void main(String[] args) {
Connection conn = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@IP주소:포트번호/DB명",
"사용자",
"비밀번호"
);
System.out.println("연결 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
System.out.println("연결끊기");
} catch (SQLException e) {}
}
}
}
}
INSERT문, UPDATE문, DELETE문 실행
1. String 타입으로 INSERT문 준비하기
→ ?(물음표)를 사용하여 매개변수화된 INSERT문으로 변경할 수도 있음
String sql = new StringBuilder();
sql.append("INSERT INTO users (userid, username, userpassword, userage, useremail)")
.append("VALUES (?, ?, ?, ?, ?)")
.toString();
// 또는 -----------------------------------------------------------------------------
String sql = "" +
"INSERT INTO users (userid, username, userpassword, userage, useremail)" +
"VALUES (?, ?, ?, ?, ?)"
2. Connection 클래스의 prepareStatement() 메소드에 매개변수로 INSERT문을 넣은 PreparedStatement 타입의 변수 생성
PreparedStatement pstmt = conn.prepareStatement(sql);
3. PreparedStatement 클래스의 Setter메소드를 이용해 ?(물음표) 에 들어갈 값을 지정
→ ?(물음표)는 순서에따라 1번부터 번호가 부여됨
pstmt.setString(1, "winter");
pstmt.setString(2, "한겨울");
pstmt.setString(3, "12345");
pstmt.setInt(4, 25);
pstmt.setString(5, "winter@mycompany.com");
4. 값을 지정한 후 executeUpdate() 메소드를 호출하여 SQL 문을 실행
→ executeUpdate() 메소드의 리턴값은 저장된 행 수(int) 임
int rows = pstmt.executeUpdate();
System.out.println("저장된 행 수:" + rows);
5. PreparedStatement를 더이상 사용하지 않을 경우에는 close()메소드를 호출해서 메모리 해제 시켜줌
pstmt.close();
6. UPDATE문, DELETE문도 같은 방법으로 진행
[전체 코드]
package oracle;
import java.sql.*;
public class ConnectionExample {
public static void main(String[] args) {
Connection conn = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@IP주소:포트번호/DB명",
"사용자",
"비밀번호"
);
System.out.println("연결 성공");
/*
String sql = ""
+ "INSERT INTO users (userid, username, userpassword, userage, useremail) "
+ "VALUES (?, ?, ?, ?, ?)";
*/
String sql = new StringBuilder()
.append("INSERT INTO users (userid, username, userpassword, userage, useremail) ")
.append("VALUES (?, ?, ?, ?, ?)")
.toString();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "winter");
pstmt.setString(2, "한겨울");
pstmt.setString(3, "12345");
pstmt.setInt(4, 25);
pstmt.setString(5, "winter@mycompany.com");
int rows = pstmt.executeUpdate();
System.out.println("저장된 행 수:" + rows);
pstmt.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
System.out.println("연결끊기");
} catch (SQLException e) {}
}
}
}
}
SELECT문 실행
- ResultSet 인터페이스 : select문을 실행한 결과(테이블)을 저장할 수 있게 해주는 자료형
- 1개의 행만 조회할 때 → if문 사용
- 여러개의 행을 조회할 때 → while문 사용
ResultSet 인터페이스의 next()메소드 원리
- 최초 커서는 값이 없는 첫줄에 커서가 위치함(beforeFirst 행)
- next()메소드를 사용하여 다음 줄(First 행)에 커서를 옮기고 그 곳에 값이 있는지 확인
- 읽을 값이 없을 때 까지 반복함
- 값이 없는 마지막 줄(afterLast 행)에 도달시 반복문 해제
[전체 코드]
import java.sql.*;
public class Test09_selectAll {
public static void main(String[] args) {
Connection conn = null; //db 연결
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@IP주소:포트번호/DB명",
"사용자",
"비밀번호"
);
System.out.println("연결 성공");
String sql = new StringBuilder()
.append("SELECT sno, uname, kor, eng, mat, tot, aver, addr, wdate ")
.append("FROM sungjuk ")
.append("ORDER BY sno desc")
.toString();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
/* 한줄조회
if(rs.next()) {
System.out.print(rs.getInt("sno") + ", ");
System.out.print(rs.getString("uname") + ", ");
System.out.print(rs.getInt("kor") + ", ");
System.out.print(rs.getInt("eng") + ", ");
System.out.print(rs.getInt("mat") + ", ");
System.out.print(rs.getInt("tot") + ", ");
System.out.print(rs.getInt("aver") + ", ");
System.out.print(rs.getString("addr") + ", ");
System.out.println(rs.getString("wdate"));
}
*/
//여러행 조회
while (rs.next()) {
System.out.print(rs.getInt("sno") + ", ");
System.out.print(rs.getString("uname") + ", ");
System.out.print(rs.getInt("kor") + ", ");
System.out.print(rs.getInt("eng") + ", ");
System.out.print(rs.getInt("mat") + ", ");
System.out.print(rs.getInt("tot") + ", ");
System.out.print(rs.getInt("aver") + ", ");
System.out.print(rs.getString("addr") + ", ");
System.out.println(rs.getString("wdate"));
}
rs.close();
pstmt.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) try {conn.close();} catch (SQLException e) {}
System.out.println("연결 종료");
}
}
}
'Back-End > Java' 카테고리의 다른 글
JDBC(2) (0) | 2023.03.28 |
---|---|
Java 복습, 예습 (0) | 2023.03.26 |
Java 과제 - 성적표 파일 입출력 (0) | 2023.03.23 |
댓글