JDBC
- 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.
- JDBC는 데이터베이스에서 자료를 CRUD하는 방법을 제공한다.
- JDBC는 실제 데이터베이스와 연결해주기만 할 뿐 실질적인 기능은 데이터베이스가 갖고 있다.
- 따라서 JDBC를 통해 데이터베이스와 Java프로젝트를 연결한 뒤 데이터베이스 드라이버를 로드해야 사용자가 데이터베이스에 정보를 저장할 수 있는 기반을 마련했다고 할 수 있다.
JDBC 기본 코드 - Select 작업
import java.sql.*;
public class JDBC{
public static void main (String[] args){
Connection conn = null; // DB 서버와 연결하는 객체
Statement stmt = null; // SQL을 실행하는 객체 - DB와 소통하는 통로
ResultSet rs = null; // 실행 결과를 받아오는 객체 - select 쿼리에 사용
String url = "jdbc:mysql://123.123.123.133:3306/jdbc"; // Ip,Port,DB이름
String id = "phb"; // 생성한 계정이름
String pw = "qwer1234"; // 계정의 비밀번호
try {
Class.forName("com.mysql.jdbc.driver"); // 드라이버 로딩
conn = DriverManager.getConnection(url, id, pw); // DB 접속
stmt = conn.createStatement(); // SQL을 실행 , DB와 소통하는 통로
// select 쿼리 실행시..
String sql = "SELECT * FROM signup WHERE sname='"+sname+"' AND sage = '"+sage+"'";
rs = stmt.executeQuery(sql);
}
while(rs.next()) // 한 건 씩 처리 , 있으면 1 없으면 0 // boolean 타입
{
out.println(rs.getString("sname")); // 접속하려는 DB마다 다르다
out.println(rs.getInt("sage")); // 컬럼 타입 및 컬럼 이름
}
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
finally { // 스트림은 열어준 순서의 역순으로 닫아주면 된다.
try {
if(rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
JDBC 기본 코드 - Insert 작업
import java.sql.*;
public class JDBC{
public static void main (String[] args){
Connection conn = null; // DB 서버와 연결하는 객체
Statement stmt = null; // SQL을 실행하는 객체 - DB와 소통하는 통로
ResultSet rs = null; // 실행 결과를 받아오는 객체 - select 쿼리에 사용
String url = "jdbc:mysql://123.123.123.133:3306/jdbc"; // Ip,Port,DB이름
String id = "phb"; // 생성한 계정이름
String pw = "qwer1234"; // 계정의 비밀번호
try {
Class.forName("com.mysql.jdbc.driver"); // 드라이버 로딩
conn = DriverManager.getConnection(url, id, pw); // DB 접속
stmt = conn.createStatement(); // SQL을 실행 , DB와 소통하는 통로
// Insert 쿼리 실행시..
String sql = "INSERT INTO signup (sid, spw) VALUES ('" + sid + "' , '" + spw + "')";
// String sql1 = String.format("INSERT INTO signup (sid, spw) VALUES('%s', '%s')", sid, spw);
Integer result = stmt.executeUpdate(sql); // insert 작업
PrintWriter out = response.getWriter();
if (result > 0) {
System.out.println("정상적으로 insert 됐다");
out.println("login success");
} else {
System.out.println("insert 안됨");
out.println("login failed");
}
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
finally { // 스트림은 열어준 순서의 역순으로 닫아주면 된다.
try {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
Select 작업과 Insert 작업의 차이점
Select | Insert |
rs = stmt.executeQuery(sql); | Integer result = stmt.executeUpdate(sql); |
Resultset 스트림을 직접적으로 사용한다. | Resultset 스트림을 직접적으로 사용하지 않는다. |
-> 스트림을 닫아줘야한다. | -> 스트림을 닫아주지 않아도 된다. |
Stream을 닫아주는 이유
이들 객체를 사용할 때는 적절한 시점에서 close() 메서드를 호출하여 자원을 명시적으로 해제해주어야 한다.
이는 메모리 누수를 방지하고 프로그램의 성능을 유지하기 위한 중요한 절차이다.
'Java' 카테고리의 다른 글
[Java] JSP (Intellij + Tomcat) 실습 2 (0) | 2023.12.03 |
---|---|
[Java] JSP (Intellij + Tomcat) 실습 (2) | 2023.12.02 |
[Java] Socket Communication (0) | 2023.11.29 |
[Java] 추상클래스 vs 인터페이스 (2) | 2023.11.29 |
[Java]Non-Access Modifier(final,static,abstract) (0) | 2023.11.29 |