DriverManager란?
- java.sql.Driver 구현 객체를 관리하는 일을 한다.
- DBMS 연결 요청이 들어오면 해당 DBMS의 Driver 구현체를 찾아 작업을 위임한다.
직접 Driver 구현객체를 생성하고 직접 등록하기
// 1) java.sql.Driver 구현체의 인스턴스를 생성한다.
java.sql.Driver mairadbDriver = new org.mariadb.jdbc.Driver();
java.sql.Driver oracleDriver = new oracle.jdbc.OracleDriver();
java.sql.Driver mssql.Driver = new com.microsoft.sqlserver.jdbc.SQLServerDriver();
// 2) java.sql.Driver 구현체의 인스턴스를 드라이버 관리자에게 등록한다.
DriverManager.registerDriver(mariadbDriver);
DriverManager.registerDriver(oracleDriver);
DriverManager.registerDriver(mssqlDriver);
// +) DriverManager에 등록된 Driver 인스턴스를 확인해보자.
java.sql.Driver driver = DriverManager.getDriver("jdbc:mariadb://");
System.out.println(driver);
java.sql.Driver drvier2 = DriverManager.getDriver("jdbc:oracle:thin://");
System.out.println(driver2);
java.sql.Driver driver3 = DriverManager.getDriver("jdbc:sqlserver://");
System.out.println(driver3);
//실행결과
//org.mariadb.jdbc.Driver@53d8d10a
//oracle.jdbc.OracleDriver@1d81eb93
//SQLServerDriver:1
=> java.sql.Driver 인터페이스를 구현한 클래스를 로딩하면 해당 클래스에서 자신을 자동으로 DriverManager에 등록할 것이다.
Class.forName("fully-qualified class name(패키지명을 포함한 클래스명)");
Class.forName("org.mariadb.jdbc.Driver");
java.sql.Driver driver = DriverManager.getDriver("jdbc:mariadb://");
System.out.printfln(driver);
// 실행결과
// org.mariadb.jdbc.Driver@87aac27
java.sql.Connection con = DriverManager.getConnection(
"jdbc:mariadb://localhost:3306/studydb", // jdbcURL
"study", // username
"1111" // password
);)
System.out.println("DBMS와 연결됨!");
System.out.println("DBMS와 연결 해제됨!");
JDBC URL
- jdbc:mariadb:// -> mariadb 연결
- localhost -> 연결할 서버, 현재는 localhost서버에 연결
- 3306 -> 포트번호
- /studydb -> 연결할 db
- java.sql.Statement 구현 객체를 얻는다.
SQL문을 DBMS의 형식에 따라 인코딩하여 서버에 전달하는 일을 하는 객체.
1) INSERT/UPDATE/DELETE 등 DML 관련 SQL문 전송
=> executeUpdate()
=> 리턴값: 변경(insert/update/delete)된 데이터의 개수
2) SELECT 등 DQL 관련 SQL문 전송
=> executeQuery()
=> 리턴값: 서버에서 데이터를 가져오는 일을 할 객체
// 1.DB연결 - connection
java.sql.Connection con = DriverManager.getConnection(
"jdbc:mariadb://localhost:3306/studydb?user=study&password=1111");
// 2. Statement 생성
java.sql.Statement stmt = con.createStatement();
// 3. Statement의 이름 출력
System.out.println(stmt.getClass().getName());
// 4. 명령문 실행 - executeUpdate()
int count = stmt.executeUpdate(
"insert into x_board(title,contents) values('제목10','내용')");
System.out.printf("%d 개 입력 성공!", count);
executeQuery()
=> DBMS 서버에 select 문을 보낸다.
=> 리턴 값: java.sql.ResultSet 구현 객체
ResultSet?
=> 결과가 아니다! 서버에서 결과를 가져오는 일을 할 객체이다.
=> 즉 서버의 select 실행 결과를 가져올 때 사용하는 도구이다.
// 1) DB 연결, connection
java.sql.Connection con = DriverManager.getConnection(
"jdbc:mariadb://localhost:3306/studydb?user=study&password=1111");
// 2) Statement 연결
java.sql.Statement stmt = con.createStatement();
// 3) ResultSet
java.sql.ResultSet rs = stmt.executeQuery(
"select * from x_board order by board_id desc");
// 4) getClass() getName() 쿼리문 출력
System.out.println(rs.getClass().getName());
boolean isReceived = rs.next();
// 가져왔으면 true, 가져올 게 없다면 false
if(isReceived){
System.out.printf("%s, $s, $s, $s, $s \n");
re.getString(1),
re.getString(2),
re.getString(3),
re.getString(4),
re.getString(5);
} else {
System.out.println("서버에서 한 개의 레코드를 가져오지 못했다!");
}
getString(칼럼번호) :
- DBMS에 설정된 칼ㄹ럼의 값을 문자열로 출력한다.
- Select 문에 나열한 칼럼의 순서를 지정한다.
단, 번호는 0부터가 아니라 1부터 지정한다.- select 문에 wildcard(*)를 사용했다면, 테이블 정의할 때
선언한 칼럼의 순서이다.
: DBMS에 설정된 칼럼의 타입에 따라 값을 변환해서 받고 싶다면, 다음과 같이 해당 타입의 값을 리턴하는 getXXX()을 호출하면 된다.
// int, number => getInt()
// char, varchar, text => getString()
// date, time, datetime => getDate(), getTime()
// float => getFloat()
boolean isReceived = rs.next();
if(isReceived){
System.out.printf("%d, %s, %s, %s, %s, %d\n");
rs.getInt(1); // rs.getInt("board_id");
rs.getString(2); // rs.getString("title");
rs.getString(3); // rs.getString("contents");
rs.getDate(4); // rs.getDate("created_date");
rs.getTime(4);
rs.getInt(5); // rs.getInt("view_count");
} else {
System.out.println("서버에서 한 개의 레코드를 가져오지 못했다.");
}
java.util.Connection con = DriverManager.getConnection(
"jdbc:mariadb://localhost:3306/studydb?user=study&password=1111");
java.sql.Statement stmt = con.createStatement();
java.sql.ResultSet rs = stmt.executeQuerey(
"select * from x_board order by board_id desc");
while(rs.next()){
System.out.printf("%d, %s, %s, %s, %d \n");
rs.getInt("board_id");
rs.getString("title");
rs.getString("content");
rs.getDate("created_date");
//rs.getString("created_date");하게되면 시간도함께 표시된
rs.getInt("view_count");
}
java.sql.Connection con = DriverManager.getConnection(
"jdbc:mariadb://localhost:3306/studydb?user=study&password=1111");
java.sql.Statement stmt = con.createStatement();
int count = stmt.executeUpdate(
"update x_board set view_count = view_count + 1" +
" where board_id = 4");
System.out.printf("%d개 변경성공!", count);
//executeUpdate()
//=> DBMS서버에 update문을 보낸다. 리턴값은 변경된 레코드의 수!
executeUpdate()가 DBMS서버에 delete문을 보낸다.
java.sql.Connection con = DriverManager(
"jdbc:mariadb://localhost:3306/studydb?user=study&passwoard=1111");
java.sql.Statement stmt = con.createStatement();
int count = stmt.executeUpdate(
"delete from x_board where board_id = 7");
System.out.printf(" %d 개 삭제 성공!", count);