Connection
으로 연결이 됐다면 statement
클래스를 사용할 수 있게 된다.
그리고 이 statement
에서 execute
메서드를 사용하여 쿼리를 보내고 그 결과를 ResultSet
을 통해 받아올 수 있다.
package prac;
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, ";
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;
}
return flag;
}
}
connection
을 생성한다Statement
객체를 통해 쿼리를 실행하고 그 결과를 반환받는다executeUpdate(sql)
int
타입 value를 반환한다CREATE
, DROP
또는 ALTER
구문에서는 '0'을 반환한다)과정을 살펴보면...
getConnection()
실행 createStatement
메서드로 쿼리 실행 객체 생성executeUpdate()
메서드를 사용하여 쿼리 전송 및 결과셋 수신이 과정은 Logic이 아닌 고정된 절차다.
Statement
와 execute
메서드의 종류는 용도에 따라 달라질 수 있지만 큰 틀은 동일하다.
이렇게 작성한 기능을 main에서 실행해본다.
package prac;
import java.sql.SQLException;
public class JdbcMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
DAO dao = new DAO();
try {
dao.createTable();
System.out.println("테이블 생성에 성공했습니다");
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("테이블 생성에 실패했습니다");
e.printStackTrace();
}//try-catch
}//main
}
DAO 클래스에서 getTable 메서드를 정의할 때 보류해둔 예외처리를 여기 main에서 실행했다.
JdbcMain의 메서드로 정의하여 예외처리를 먼저 수행하고, main에서 한 줄로 실행해주는 것이 훨씬 깔끔하다.
조금만 변경해보면...
package prac;
import java.sql.SQLException;
public class JdbcMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
JdbcMain main = new JdbcMain();
main.getTable();
}//main
public void getTable() {
DAO dao = new DAO();
try {
dao.createTable();
System.out.println("테이블 생성에 성공했습니다");
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("테이블 생성에 실패했습니다");
e.printStackTrace();
}
}// getTable()
}
>> 실행 결과
Connected...
쿼리의 반환값은 :0
테이블 생성에 성공했습니다
MariaDB [jdbc]> show tables;
+----------------+
| Tables_in_jdbc |
+----------------+
| toys |
+----------------+
1 row in set (0.002 sec)
코드는 조금 길어졌다...만
이후 BusinessLogic 클래스의 많은 메서드들을 처리한다고 했을 때, main 클래스 안은 깔끔하게 가져가는 것이 맞는 것 같다.
execute...
메서드아래는 statement
에 사용할 수 있는 메소드들이다
.executeUpdate([query])
int
타입을 반환한다: 반영된 레코드 수를 반환하는 것이다INSERT
/ DELETE
/ UPDATE
// CREATE
/ DROP
에 사용한다CREATE
/ ALTER
/ DROP
에 대해서는 ‘0’을 반환한다 )SELECT
구문에서는 사용하지 않는다.executeQuery([query])
ResultSet
객체를 반환한다SELECT
, SHOW
)get자료타입()
메소드로 불러온 레코드(행)의 칼럼값에 접근할 수 있다 ResultSet rs = pstmt.executeQuery();
rs.getInt(1)
rs.getString(2)
이런 식으로 받아온다
.execute([query])
true
, 그렇지 않다면 false
로 출력된다