앞에 Connection
을 완료해 연결이 됐다면, Statement
를 사용할 차례이다.
statement
클래스의 execute
메서드를 사용해 쿼리를 내보내고, 그 결과값을 ResultSet
을 통해 받는다.
statement 클래스는 SQL 쿼리를 전달 및 실행하는 역할을 한다
execute()
: execute는 SQL 쿼리를 실행하고 boolean 값을 반환한다. true
, 아니면 false
를 출력executeQuery()
: SQL문을 실행하고 ResultSet
형식의 결과를 리턴한다.executeUpdate()
: insert, update, delete 문을 실행하고 영향을 받은 레코드의 갯수나 0을 반환한다. 실패할 경우 에러 반환0
은 create, drop, alter 문일때 반환, select 문에서는 사용하지 않는다close()
: statement의 리소스를 반납한다각 메서드의 매개변수 String sql
은 쿼리로, 일반적으로 미리 변수로 작성해둔다.
package test;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class DAO {
public boolean createTable() throws SQLException {
boolean flag = false;
String sql = "create table toys (";
sql += "No int primary key not null auto_increment, ";
sql += "name varchar(20) not null, ";
sql += "manufacturing varchar(20) not null, ";
sql += "price int not null ";
sql += ")";
Connection con = ConnectionManager.getConnection();
Statement stmt = con.createStatement();
int affectedCount = stmt.executeUpdate(sql);
System.out.println("쿼리의 반환값은 : " + affectedCount);
if (affectedCount == 0) {
flag = true;
}
stmt.close();
con.close();
return flag;
}
}
위 코드를 보면서 하나씩 알아보자
String sql
변수를 선언하면서 쿼리를 미리 작성
ConnectionManager
클래스의 getConnection()
메서드를 실행해 con
변수에 초기화
createStatement()
메서드로 쿼리 실행 객체를 생성
executeUpdate(sql)
메서드를 사용해 쿼리를 전송하고, 결과를 받아 affectedCount
변수에 초기화
실행의 역순으로 close()
를 진행해준다.
return 값으로 boolean을 받는 이유는 결과가 내가 원하는 대로 갔는지 확인하기 위한 확인용
그럼 이제 위에 작성한 코드를 실행할 Main 클래스를 만들어준다.
package test;
import java.sql.SQLException;
public class DAOMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
DAOMain main = new DAOMain();
main.MakeTable();
}
public void MakeTable() {
DAO dao = new DAO();
try {
dao.createTable();
System.out.println("테이블 생성 성공");
} catch (SQLException e) {
System.out.println("테이블 생성 실패");
e.printStackTrace();
}
}
}
Main에서 바로 실행하지 않고 MakeTable()
메서드를 만들고 예외처리를 해준다.
그리고 Main에서 실행하는 것으로 마무리했다.
위 Main 클래스를 실행하면 아주 성공적으로 결과값이 나오는 것을 확인할 수 있다.
ResultSet은 위에서 설명했던 executeQuery()
메서드의 결과로 반환되는 값이다.
간단히 이해하자면 Java에 DB를 복사해 임시저장한다고 생각하면된다.
복사할 때는 한 행(레코드) 단위로 불러올 수 있고, get자료형()
메서드로 불러온 레코드의 칼럼값에 접근할 수 있다.
ResultSet rs = stmt.executeQuery();
rs.getInt(1);
rs.getString(2);