db 학습시 SQL이용해서 db에다 직접 값을 넣거나 조회하는 등의 일을 수행했음.
하지만 우리가 웹을 동작,수행시킬 때마다 매번 그럴 수는 없음.
그래서 프로그램이 이 일을 대신할 수 있게 만들어줘야 하는데 이때 사용하는 것이 JDBC이다.
JAVA는 표준 인터페이스인 JDBC API를 제공한다. 그래서 사용하기 편하다. 인터페이스가 이미 정의되어 있기 때문에, 어떤 db벤더든 간에 다 똑같은 방법으로 사용하면 된다.
DB벤더, 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버(driver)를 제공한다. 그래서 사용자들은 이런 드라이버를 이용하면 된다.
import java.sql.*;
자바코드에서 나랑 다른 패키지에 있는 클래스를 사용하기 위해서 반드시 import해줘야 한다.
Class.forName("com.mysql.jdbc.Driver");
이는 드라이버를 로드하는 코드인데 각각 DB벤더에서 제공하는 객체이다. jdbc.Driver는 패키지명.클래스명이다. 해당 객체를 Class라는 클래스가 갖고 있는 forName이라는 메소드를 이용하면 해당 객체가 메모리에 올라간다.
String dburl = "jdbc:mysql://localhost/dbName";
Connection con = DriverManager.getConnection(dburl,ID,PWD);
public static Connection getConnection() throws Exception{
//오라클 사용시 정의되는 URL 형식
String url = "jdbc:oracle:thin:@117.16.46.111:1521:xe";
String user = "smu"; //DB의 user
String password = "smu";//DB의 password
Connection conn = null;
//오라클 벤더가 제공하고 있는 클래스 이름
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
return conn;
}
//Statement 생성
Statement stmt = con.createStatement();
//질의 수행
ResultSet rs = stmt.executeQuery("select no from user");
//any SQL
stmt.execute("query");
//Select
stmt.executeQuery("query");
//Insert,Update,Delete
stmt.executeUpdate("query");
Statement 객체에 쿼리문을 작성하고 실행해달라는 메서드(execute)를 사용한다. 해당 메서드는 실행할 쿼리가 Select냐 Insert냐 Update냐 Delete냐 에 따라서 메서드가 달라진다.
그리고 statement객체를 이용해서 ResultSet을 얻어낼 수 있다.
statement객체가 하는 일은 select..하고 만드는 것이다. 즉, 쿼리문을 생성하고 수행하도록 도와주는 것이다. 이 statement도 인터페이스이고, 실제로 db벤더가 무엇이냐에 따라서 이 statement객체를 구현한 객체가 리턴이 될 것이다.
ResultSet rs = stmt.executeQuery("select no from user");
while(rs.next()) //레코드상에서 다음것이 있는 동안에
System.out.println(rs.getInt("no"));
//가리키고 있는 거에서 칼럼명이 no인애 값을 하나 꺼내와라
rs.close();
stmt.close();
con.close();