- 자바 프로그램이 데이터베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스입니다.
JDBC 표준 인터페이스는 다음 3가지 기능을 표준 인터페이스로 정의해서 제공한다.
- java.sql.Connection : 연결
- java.sql.Statement : SQL을 담은 내용
- java.sql.ResultSet : SQL 요청 응답
구글창에 검색해서 maven 사이트에 들어가준다.
MariaDB를 검색해 jar을 다운로드 한다.
그 후 vscode에 들어가 lib폴더 안에 drag해서 넣어준다.
DBeaver를 실행해 localhost에서 우클릭해서 아래의 그림과 같이 들어간다.
들어간 후 url을 클릭해서 복붙한다.
DBConnection할 때 사용한다.
실습 파일들로 보자!!
데이터베이스의 employee테이블을 클래스로 만든다.
컬럼도 데이터 타입에 맞게 작성해준다.
(아래와 같이 하면 됨)
package ch13;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
// employee 클래스
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Emp {
private int employeeId;
private String firstName;
private int salary;
}
아까 위에서 복붙한 url을 붙여주고 뒤에 /데이터베이스 이름을 적어준다.(여기선 /hr)
package ch13;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
public class S01 {
public static void main(String[] args) {
// 자바와 db를 연결하는 객체
Connection connection = null;
// 3306까지가 데이터베이스시스템 / hr위치가 데이터베이스
String url = "jdbc:mariadb://localhost:3306/hr";
try {
connection = DriverManager.getConnection(
url,
"root",
"1234"
);
} catch (SQLException e) {
System.out.println("디비 연결 중 오류가 발생했습니다.");
}
// 쿼리문 날리기
String sql = "select first_name from employees where employee_id = ?";
PreparedStatement prepareStatement = null;
try {
prepareStatement = connection.prepareStatement(sql);
prepareStatement.setInt(1, 100);
} catch (Exception e) {
System.out.println("디비 사용중 오류가 발생했습니다.");
}
ResultSet resultSet = null;
try {
resultSet = prepareStatement.executeQuery();
} catch (Exception e) {
System.out.println("쿼리 실행 중 오류가 발생했습니다.");
System.out.println(e.getMessage());
return;
}
// 데이터 자바로 변환'
try {
if (resultSet.next()) {
System.out.println(resultSet.getString("first_name"));
}
} catch (Exception e) {
System.out.println("데이터 변환 중 오류가 발생했습니다.");
}
try {
// connection은 무조건 닫아줘야 함
// null 체크
if (connection != null) {
connection.close();
}
if (prepareStatement != null) {
prepareStatement.close();
}
if (resultSet != null) {
resultSet.close();
}
} catch (Exception e) {
System.out.println("연결 종료 중 오류가 발생했습니다.");
}
}
}
실행결과
System.out.println(resultSet.getString("first_name"));
위의 println이 나온 것!
주석으로 설명..
package ch13;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class S02 {
public static void main(String[] args) throws SQLException{
// try 밖에서도 쓸 수 있게 선언만 해줌
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// db연결주소
String url = "jdbc:mariadb://localhost:3306/hr";
// db연결
connection = DriverManager.getConnection(url, "root", "1234");
// 쿼리문 준비
String sql = "select * from employees where salary > 10000";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 100);
// 쿼리문 실행
resultSet = preparedStatement.executeQuery();
// 결과값 확인
List<Emp> list = new ArrayList<>();
while (resultSet.next()) {
Emp emp = new Emp(
resultSet.getInt("employee_id"),
resultSet.getString("first_name"),
resultSet.getInt("salary")
);
list.add(emp);
}
System.out.println(list);
// if (resultSet.next()) {
// Emp emp = new Emp(
// resultSet.getInt("employee_id"),
// resultSet.getString("first_name"),
// resultSet.getInt("salary")
// );
// System.out.println(emp);
// }
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
// connection은 무조건 닫아줘야 함
// null 체크
if (connection != null) {
connection.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
if (resultSet != null) {
resultSet.close();
}
}
}
}
실행결과
교수님이 필살 요약을 알려주심..ㅋㅋ
코드만 올릴 예정
main실행파일
import java.util.Scanner;
public class App {
public static void main(String[] args) throws Exception {
System.out.println("Hello, World!");
// 사용자에게 id, pw, 이름, 이메일 입력받기
Scanner sc = new Scanner(System.in);
System.out.print("ID입력: ");
String id = sc.next();
System.out.print("PW입력: ");
String pw = sc.next();
System.out.print("이름 입력: ");
String name = sc.next();
System.out.print("이메일 입력: ");
String email = sc.next();
NaverDTO dto = new NaverDTO();
dto.setUserId(id);
dto.setUserPw(pw);
dto.setName(name);
dto.setEmail(email);
// 디비 연결
DBClass.connectDB();
// 데이터 저장
// DBClass.save(dto);
// 데이터 찾기
NaverDTO naverDto = DBClass.select();
System.out.println("아이디: " + naverDto.getUserId());
// 데이터 수정
// 데이터 삭제
}
}
mgr같은 파일
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DBClass {
private static final String DB_DRIVER_CLASS = "org.mariadb.jdbc.Driver";
private static final String DB_URL = "jdbc:mariadb://localhost:3306/hello";
private static final String DB_USERNAME = "hello";
private static final String DB_PASSWORD = "hello1";
private static Connection conn;
PreparedStatement pstmt = null;
// 디비 연결
public static void connectDB() {
try {
Class.forName(DB_DRIVER_CLASS);
conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
System.out.println("연결성공");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("드라이브 로딩 실패");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("DB 연결 실패");
}
}
// 데이터 저장
public static void save(NaverDTO dto) {
PreparedStatement pstmt = null;
try {
// Insert문 ?부분은 아래의 입력값이 자동으로 변환이 됩니다.
String sql = "INSERT INTO `naver` (`userid`, `userpw`, `name`, `email`) VALUES (?, ?, ?, ?)";
pstmt = conn.prepareStatement(sql);
int index = 1;
// Insert 데이터값
pstmt.setString(index++, dto.getUserId());
pstmt.setString(index++, dto.getUserPw());
pstmt.setString(index++, dto.getName());
pstmt.setString(index++, dto.getEmail());
// SQL실행
int count = pstmt.executeUpdate();
if (count == 0) {
System.out.println("데이터값에 이상이 있습니다.");
} else {
System.out.println("데이터 Insert 성공!");
}
} catch (SQLException e) {
System.out.println("Database 연결중 에러가 발생 했습니다.");
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 데이터 가져오기
public static NaverDTO select() {
PreparedStatement pstmt = null;
ResultSet rs = null;
List<NaverDTO> list = new ArrayList<>();
try {
// Select 쿼리문
String sql = " SELECT * FROM naver ";
// 객체 생성
pstmt = conn.prepareStatement(sql);
// SQL실행
rs = pstmt.executeQuery();
// 결과값 출력
// List<NaverDTO> list = new ArrayList<>();
while (rs.next()) {
NaverDTO dto = new NaverDTO();
String userid = rs.getString("userid");
String userpw = rs.getString("userpw");
String name = rs.getString("name");
String email = rs.getString("email");
dto.setUserId(userid);
dto.setUserPw(userpw);
dto.setName(name);
dto.setEmail(email);
// System.out.println("아이디 : " + userid);
// System.out.println("패스워드 : " + userpw);
// System.out.println("이름 : " + name);
// System.out.println("이메일 : " + email);
}
} catch (SQLException e) {
System.out.println("Database 연결중 에러가 발생 했습니다.");
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return dto;
}
}
DTO파일
public class NaverDTO {
private String userId;
private String userPw;
private String name;
private String email;
// setter getter
// 데이터값을 세팅
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserId() {
return userId;
}
public String getUserPw() {
return userPw;
}
public void setUserPw(String userPw) {
this.userPw = userPw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
소중한 정보 감사드립니다!