Java + DB 연동
실습
- DBProject
- DBConnect.java : DB 연결
- BookSelectEx.java : DB 연결+ 해당 작업 수행
- BookInsertEx.java : DB 연결+ 해당 작업 수행
- BookInputInsert.java : DB 연결+ 해당 작업 수행
- BookUpdateEx.java : DB 연결+ 해당 작업 수행
- BookDeleteEx.java : DB 연결+ 해당 작업 수행
- 프로젝트명: DBTest
- 패키지명: db1
- 클래스
- DBConnecton.java
- BookInsertEX.java
- DBConnect 생성
package db1;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnet {
public static void main(String[] args) {
try {
//JDBC Driver 클래스의 객체 생성 런타임시 로드
Class.forName("com.mysql.cj.jdbc.Driver");
// 연결 주소, 사용자 계정, 패스워드 문자열 설정
String url = "jdbc:mysql://localhost:3306/sqldb3?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
// DB 연결하기 위한 객체 생성
// DriverManager를 통해 Connection 객체 생성
// MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
Connection con = DriverManager.getConnection(url, user, pwd);
// Connection 객체가 생성되면 DB 연결 성공
if(con != null) {
System.out.println("DB 연결 성공!");
}
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
}
}
- BookInsertEX.java 생성
package db1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
public class BookSelectEx {
public static void main(String[] args) {
try {
//JDBC Driver 클래스의 객체 생성 런타임시 로드
Class.forName("com.mysql.cj.jdbc.Driver");
// 연결 주소, 사용자 계정, 패스워드 문자열 설정
String url = "jdbc:mysql://localhost:3306/sqldb3?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
// DB 연결하기 위한 객체 생성
// DriverManager를 통해 Connection 객체 생성
// MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
Connection con = DriverManager.getConnection(url, user, pwd);
// Connection 객체가 생성되면 DB 연결 성공
if(con != null) {
System.out.println("DB 연결 성공!");
}
// DB 연결 성공 후 SELECT 작업
// SELECT 쿼리문 문자열 생성
String sql = "select * from book order by bookNo";
// 쿼리문 전송을 위한 PreparedStatement 객체 생성
// Connection 인터페이스의 prepareStatement() 메소드를 사용하여 객체 생성
PreparedStatement pstmt = con.prepareStatement(sql);
// 쿼리문 실행시키고 결과 받아옴
// select 구문이므로 excuteQuery() 메소드 사용
// 반환되는 결과는 ResultSet 객체가 받음
ResultSet rs = pstmt.executeQuery(sql);
// 제목 출력
System.out.println("\n도서 정보 조회");
System.out.println("도서번호 \t\t\t 도서명 \t\t\t\t\t\t 저자 \t\t 가격 \t\t 발행일 \t 재고 \t 출판사번호");
// executeQuery() 실행 결과 받아온 ResultSet에서 데이터 추출
// ResultSet의 next() 메서드를 이용해서 논맂거 커서를 이동해 각 열의 데이터 바인딩해옴
// next(): 커서를 이동하면 다ㅡㅇㅁ 행 지정
// 다음 행이 있으면 true, 없으면 false 반환
while(rs.next()) {
// (1) 한 행씩 next 하면서 데이터를 가져와 변수에 저장
String bookNo = rs.getString(1);
String bookName = rs.getString(2);
String bookAuthor = rs.getString(3);
int bookPrice = rs.getInt(4);
Date bookData = rs.getDate(5);
int bookStock = rs.getInt(6);
String pubNo = rs.getString(7);
// (2) 한 행씩 변수 출력
System.out.format("%-10s\t %-25s\t %-5s %10d %13s \t%3d %10s\n",
bookNo, bookName, bookAuthor, bookPrice, bookData, bookStock, pubNo);
}
// 모든 객체 close
rs.close();
pstmt.close();
con.close();
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
}
}
- BookInsertEx.java 생성
- 코드에 값을 직접 넣은 형태
package db1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class BookInsertEx {
public static void main(String[] args) {
try {
//JDBC Driver 클래스의 객체 생성 런타임시 로드
Class.forName("com.mysql.cj.jdbc.Driver");
// 연결 주소, 사용자 계정, 패스워드 문자열 설정
String url = "jdbc:mysql://localhost:3306/sqldb3?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
// DB 연결하기 위한 객체 생성
// DriverManager를 통해 Connection 객체 생성
// MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
Connection con = DriverManager.getConnection(url, user, pwd);
// DB 연결 완료
// 저장할 데이터
String bookNo = "1016";
String bookName = "알고리즘";
String bookAuthor = "김철수";
int bookPrice = 25000;
String bookDate = "2021-10-10";
int bookStock = 10;
String pubNo = "1";
// sql문 작성
String sql = "insert into book values(?,?,?,?,?,?,?)";
// sql문 values 들어갈 (?) 데이터 설정
// 쿼리문 전송을 위한 PreparedStatement 객체 생성
// Connection 인터페이스의 prepareStatement() 메소드를 사용하여 객체 생성
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,bookNo);
pstmt.setString(2,bookName);
pstmt.setString(3,bookAuthor);
pstmt.setInt(4,bookPrice);
pstmt.setString(5,bookDate);
pstmt.setInt(6,bookStock);
pstmt.setString(7,pubNo);
// 쿼리문 실행 : 영향을 받은 행의 수 반환
// select : executeQuery() - 결과 행 ResultSet반환
// insert / update / delete : executeUadate() - 영향을 받은 행의 수 반환
int result = pstmt.executeUpdate();
// Connection 객체가 생성되면 DB 연결 성공
if(result > 0) {
System.out.println("데이터 입력 성공!");
}
pstmt.close();
con.close();
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
}
}
- BookInsertEx.java 생성
- Scanner를 통해 값을 받아오는 형태
package db1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
// 콘솔에서 데이터 입력 받아서 도서테이블에 저장
public class BookInsertInputEx {
public static void main(String[] args) {
// 입력
Scanner scan = new Scanner(System.in);
// 데이터 입력
System.out.println("도서 정보 등록");
System.out.println("-------------------------\n");
System.out.print("도서번호 입력: ");
String bookNo = scan.nextLine();
System.out.print("도서명 입력: ");
String bookName = scan.nextLine();
System.out.print("저자 입력: ");
String bookAuthor = scan.nextLine();
System.out.print("가격 입력: ");
int bookPrice = scan.nextInt();
// 앞의 엔터 값이 다음 변수에 들어가지 않도록 읽어들임
scan.nextLine();
System.out.print("발행일 입력: ");
String bookDate = scan.nextLine();
System.out.print("재고 입력: ");
int bookStock = scan.nextInt();
// 앞의 엔터 값이 다음 변수에 들어가지 않도록 읽어들임
scan.nextLine();
System.out.print("출판사 번호 입력: ");
String pubNo = scan.nextLine();;
// DB 연동
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/sqldb3?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
Connection con = DriverManager.getConnection(url, user, pwd);
// sql문 작성
String sql = "insert into book values(?,?,?,?,?,?,?)";
// sql문 values 들어갈 (?) 데이터 설정
// 쿼리문 전송을 위한 PreparedStatement 객체 생성
// Connection 인터페이스의 prepareStatement() 메소드를 사용하여 객체 생성
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,bookNo);
pstmt.setString(2,bookName);
pstmt.setString(3,bookAuthor);
pstmt.setInt(4,bookPrice);
pstmt.setString(5,bookDate);
pstmt.setInt(6,bookStock);
pstmt.setString(7,pubNo);
// 쿼리문 실행 : 영향을 받은 행의 수 반환
// select : executeQuery() - 결과 행 ResultSet반환
// insert / update / delete : executeUadate() - 영향을 받은 행의 수 반환
int result = pstmt.executeUpdate();
// Connection 객체가 생성되면 DB 연결 성공
if(result > 0) {
System.out.println("데이터 입력 성공!");
}
pstmt.close();
con.close();
scan.close();
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
// DB에 저장
}
}
- BookUpdateEx.java 생성
package db1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class BookUpdateEx {
public static void main(String[] args) {
// 입력
Scanner scan = new Scanner(System.in);
// 데이터 입력
System.out.println("도서 정보 수정");
System.out.println("-------------------------\n");
System.out.print("수정할 도서번호 입력: ");
String bookNo = scan.nextLine();
System.out.print("도서명 입력: ");
String bookName = scan.nextLine();
System.out.print("저자 입력: ");
String bookAuthor = scan.nextLine();
System.out.print("가격 입력: ");
int bookPrice = scan.nextInt();
// 앞의 엔터 값이 다음 변수에 들어가지 않도록 읽어들임
scan.nextLine();
System.out.print("발행일 입력: ");
String bookDate = scan.nextLine();
System.out.print("재고 입력: ");
int bookStock = scan.nextInt();
// 앞의 엔터 값이 다음 변수에 들어가지 않도록 읽어들임
scan.nextLine();
System.out.print("출판사 번호 입력: ");
String pubNo = scan.nextLine();
try {
//JDBC Driver 클래스의 객체 생성 런타임시 로드
Class.forName("com.mysql.cj.jdbc.Driver");
// 연결 주소, 사용자 계정, 패스워드 문자열 설정
String url = "jdbc:mysql://localhost:3306/sqldb3?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
// DB 연결하기 위한 객체 생성
// DriverManager를 통해 Connection 객체 생성
// MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
Connection con = DriverManager.getConnection(url, user, pwd);
// Connection 객체가 생성되면 DB 연결 성공
if(con != null) {
System.out.println("DB 연결 성공!");
}
// DB 연결 완료
// SQL 작성
// 입련된 수정할 도서 번호로 찾아서 입력된 값으로 변경
// 주의!! 기본키 변경 불가
String sql = "update book set bookName=?, bookAuthor=?, bookPrice=?, " +
"bookDate=?, bookStock=?, pubNo=? where bookNo=?";
// PreparedStatement 객체 생성
// 쿼리문 전송을 위한 PreparedStatement 객체 생성
// 데이터 설정 : UPDATE문 : UPDATE 테이블명 SET 열이름 = 값 WHERE 조건;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,bookName);
pstmt.setString(2,bookAuthor);
pstmt.setInt(3,bookPrice);
pstmt.setString(4,bookDate);
pstmt.setInt(5,bookStock);
pstmt.setString(6,pubNo);
pstmt.setString(7,bookNo);
// 실행 쿼리문: 영향을 받은 행의 수 반환
int result = pstmt.executeUpdate();
// 결과 출력: 성공!
if(result > 0){
System.out.println("update 성공!!");
}
// 결과
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
}
}
- BookDeleteEx.java 생성
package db1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class BookDeleteEx {
public static void main(String[] args) {
// 입력
Scanner scan = new Scanner(System.in);
// 데이터 입력
System.out.println("도서 정보 삭제");
System.out.println("-------------------------\n");
System.out.print("삭제할 도서번호 입력: ");
String bookNo = scan.nextLine();
try {
//JDBC Driver 클래스의 객체 생성 런타임시 로드
Class.forName("com.mysql.cj.jdbc.Driver");
// 연결 주소, 사용자 계정, 패스워드 문자열 설정
String url = "jdbc:mysql://localhost:3306/sqldb3?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
// DB 연결하기 위한 객체 생성
// DriverManager를 통해 Connection 객체 생성
// MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
Connection con = DriverManager.getConnection(url, user, pwd);
// Connection 객체가 생성되면 DB 연결 성공
if(con != null) {
System.out.println("DB 연결 성공!");
}
// DB 연결 완료
// 도서 정보 삭제
// SQL 작성
String sql = "delete from book where bookNo=?";
// PreparedStatement 객체 생성
// 쿼리문 전송을 위한 PreparedStatement 객체 생성
// 데이터 설정 : UPDATE문 : UPDATE 테이블명 SET 열이름 = 값 WHERE 조건;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,bookNo);
// 실행 쿼리문: 영향을 받은 행의 수 반환
int result = pstmt.executeUpdate();
// 결과 출력: 성공!
if(result > 0){
System.out.println("delete 성공!!");
}
// 결과
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
}
}
Statement Vs. PreparedStatement
- 쿼리문 전송을 위한 객체 생성
Statement
- 문자열로 구성된 SQL 문을 DBMS로 전송하면 내부적으로 SQL문을 JDBC 드라이버가 읽을 수 있는 형식으로 전처리 수행
- SQL은 실행될 때마다 매번 전처리 작업 수행해야 하기 때문에 반복적인 작업에서 속도가 늦어질 수 있음
- 쿼리문에 값이 미리 다 입력되어 있어야 함
- 작성하는 SQL문이 복잡해진다는 단점 존재
PreparedStatement
- Statement 인터페이스의 하위 인터페이스
- SQL은 실행될 때마다 매번 전처리하지 않고 라이브러리 캐시에서 읽어와서 처리하기 때문에 처리 속도가 빠름
- SQL문 구조는 같으나 조건이 수시로 변할 때 조건의 변수 처리를 '?'(placeholder)로 지정 - 바인딩 변수
- 동일한 SQL문을 특정 값만 바꾸어서 여러 번 실행해야 할 때 또는 인수가 많아서 SQL 문이 복잡할 때 편리
- 특징: 속도 빠르고 복잡하지 않다
- 실무에서 주로 사용
- 바인딩 변수의 순서는 ?의 순서에 의해 결정
- 시작번호 1부터
- 바인딩 변수에 값을 저장하기 위해서 setXXX() 메서드 사용
- 주의!! 바인딩 변수는 반드시 열이름이 아닌 열의 값의 자리에 위치
- values(?,?,?,?,?,?,?)
연습문제
- db2 패키지 생성
- product 테이블 사용 (sqldb2.product)
- DBConnect
- ProductSelect.java
- ProductInsert.java
- ProductInputInsert.java
- ProductUpdate.java
- ProductDelete.java
DTO / DAO 사용 - 과제 제출 형식
- insert( ) / select( )
DTO (Data Transfer Object)
- 데이터 저장용 클래스(멤버 변수에 데이터를 저장)
- 데이터베이스에 데이터를 저장하거나 데이터베이스로부터 데이터를 조회할 때 데이터를 담아서 전달하기 위해 사용
- 데이터 입력 -> DTO -> DAO(insert()로 전달) -> DB
- 데이터 조회 -> DB -> DAO(select()로 데이터 읽어옴) -> DTO -> 출력 (또는 DTO에 담아서 출력 담당에게 전달)
DAO (Data Access Object)
- 데이터에비스에 Access하는 클래스
- 데이터베이스에 데이터를 저장하거나 데이터베이스에서 데이터를 가져올 때 사용
- insert( ) / select( ) / update( ) / delete( ) 기능의 메서드 퐇ㅁ
- DB 연결 (생성자)
실습
db3 패키지 생성
sqldb2.student 스키마 사용
클래스 생성
- StudentDTO.java
- StudentDAO.java
- StudentEx.java(main)
StudentDTO 생성
package db3;
public class StudentDTO {
private String stdNo;
private String stdName;
private int stdYear;
private String stdAddress;
private String stdBirthday;
private String dptNo;
// 매개변수가 있는 생성자
// 생성자는 StudentDTO 클래스 객체가 생성될 때 자동으로 호출되면서
// 생성자의 매개변수 값을 받음
public StudentDTO(String stdNo, String stdName, int stdYear, String stdAddress, String stdBirthday, String dptNo){
this.stdNo = stdNo;
this.stdName = stdName;
this.stdYear = stdYear;
this.stdAddress = stdAddress;
this.stdBirthday = stdBirthday;
this.dptNo = dptNo;
}
// getter/setter 생성
// get: 멤버변수의 값을 반환해줄 때 사용
// set: 멤버변수에 값을 저장할 때 사용
public String getStdNo() {
return stdNo;
}
public void setStdNo(String stdNo) {
this.stdNo = stdNo;
}
public String getStdName() {
return stdName;
}
public void setStdName(String stdName) {
this.stdName = stdName;
}
public int getStdYear() {
return stdYear;
}
public void setStdYear(int stdYear) {
this.stdYear = stdYear;
}
public String getStdAddress() {
return stdAddress;
}
public void setStdAddress(String stdAddress) {
this.stdAddress = stdAddress;
}
public String getStdBirthday() {
return stdBirthday;
}
public void setStdBirthday(String stdBirthday) {
this.stdBirthday = stdBirthday;
}
public String getDptNo() {
return dptNo;
}
public void setDptNo(String dptNo) {
this.dptNo = dptNo;
}
}
- StudentDAO 생성
package db3;
//(1) 생성자에서 DB 연결
//(2) selectStudent() 메서드 : 데이터베이스의 student 테이블에서 select 한 결과 출력
//(3) insertStudent(StudentDTO dto) 메서드
// - main()에서 입력한 student 데이터를 전달 받아서
// - student 테이블에 insert 작업 수행
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
public class StudentDAO {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// 생성자 : 데이터베이스 연결
public StudentDAO() {
try {
//JDBC Driver 클래스의 객체 생성 런타임시 로드
//Class.forName("com.mysql.cj.jdbc.Driver");
// 연결 주소, 사용자 계정, 패스워드 문자열 설정
String url = "jdbc:mysql://localhost:3306/sqldb2?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
// DB 연결하기 위한 객체 생성
// DriverManager를 통해 Connection 객체 생성
// MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
con = DriverManager.getConnection(url, user, pwd);
// Connection 객체가 생성되면 DB 연결 성공
if(con != null) {
System.out.println("DB 연결 성공!");
}
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
}
//(2) selectStudent() 메서드
public void selectStudent() {
try {
// sql 직성
String sql = "select * from student order by stdNo";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(sql);
while(rs.next()) {
String stdNo = rs.getString(1);
String stdName = rs.getString(2);
int stdYear = rs.getInt(3);
String stdAddress = rs.getString(4);
Date stdBirthday = rs.getDate(5);
String dptNo = rs.getString(6);
System.out.format("%-10s\t %-10s\t %-4d %-20s %13s %5s\n",
stdNo, stdName, stdYear, stdAddress, stdBirthday, dptNo);
}
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
}
//(3) insertStudent(StudentDTO dto)
public void insertStudent(StudentDTO dto) {
try {
// sql문 작성
String sql = "insert into student values(?,?,?,?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,dto.getStdNo());
pstmt.setString(2,dto.getStdName());
pstmt.setInt(3,dto.getStdYear());
pstmt.setString(4,dto.getStdAddress());
pstmt.setString(5,dto.getStdBirthday());
pstmt.setString(6,dto.getDptNo());
int result = pstmt.executeUpdate();
if(result > 0) System.out.println("데이터 입력 성공");
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
}
}
- StudentEx 생성
package db3;
import java.util.Scanner;
public class StudentEx {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// DAO 객체 생성하면서 DB 연결
// 객체 생성될 때 생성자 호출되면서 DB 연결
StudentDAO stdDAO = new StudentDAO();
// 학생 데이터 입력: stdentDAO 클래스의 insertStudetn() 메서드 호출
System.out.println("학생 정보 등록");
System.out.println("-------------------------\n");
System.out.print("학번 입력: ");
String stdNo = scan.nextLine();
System.out.print("이름 입력: ");
String stdName = scan.nextLine();
System.out.print("학년 입력: ");
int stdYear = scan.nextInt();
scan.nextLine();
System.out.print("주소 입력: ");
String stdAddress = scan.nextLine();
System.out.print("생일 입력: ");
String stdBirthday = scan.nextLine();
System.out.print("학과번호 입력: ");
String dptNo = scan.nextLine();
// StudentDTO 객체 생성
// 생성과 동시에 갑 저장: 생성자 호출하면서 값 전달
StudentDTO stdDTO = new StudentDTO(stdNo, stdName, stdYear, stdAddress, stdBirthday, dptNo);
stdDAO.insertStudent(stdDTO);
// 학생 정보 조회 : StudentDAO 클래스의 selectStudent() 메서드 호출하면서 stdDTO 전달
//객체.메서드
stdDAO.selectStudent();
}
}
연습문제
- db4 패키지 생성
- product 테이블 사용
- 클래스 생성
- ProductDTO
- ProductDAO
- 생성자에서 DB 연결
- insertProduct( ): 데이터 저장
- selectProduct( ): 데이터 조회
- ProductEx
- 데이터 입력하고
- insertProduct() 호출해서 데이터 저장
- selectProduct() 호출해서 데이터 출력
- ProductDTO 생성
package db4;
public class ProductDTO {
private String prdNo;
private String prdName;
private int prdPrice;
private String prdMaker;
private String prdColor;
private int ctgNo;
public ProductDTO(String prdNo, String prdName, int prdPrice, String prdMaker, String prdColor, int ctgNo) {
this.prdNo = prdNo;
this.prdName = prdName;
this.prdPrice = prdPrice;
this.prdMaker = prdMaker;
this.prdColor = prdColor;
this.ctgNo = ctgNo;
}
public String getPrdNo() {
return prdNo;
}
public void setPrdNo(String prdNo) {
this.prdNo = prdNo;
}
public String getPrdName() {
return prdName;
}
public void setPrdName(String prdName) {
this.prdName = prdName;
}
public int getPrdPrice() {
return prdPrice;
}
public void setPrdPrice(int prdPrice) {
this.prdPrice = prdPrice;
}
public String getPrdMaker() {
return prdMaker;
}
public void setPrdMaker(String prdMaker) {
this.prdMaker = prdMaker;
}
public String getPrdColor() {
return prdColor;
}
public void setPrdColor(String prdColor) {
this.prdColor = prdColor;
}
public int getCtgNo() {
return ctgNo;
}
public void setCtgNo(int ctgNo) {
this.ctgNo = ctgNo;
}
}
- ProductDAO 생성
package db4;
import db3.StudentDTO;
import java.sql.*;
import java.util.Date;
public class ProductDAO {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
public ProductDAO(){
try {
//JDBC Driver 클래스의 객체 생성 런타임시 로드
//Class.forName("com.mysql.cj.jdbc.Driver");
// 연결 주소, 사용자 계정, 패스워드 문자열 설정
String url = "jdbc:mysql://localhost:3306/sqldb2?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
// DB 연결하기 위한 객체 생성
// DriverManager를 통해 Connection 객체 생성
// MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
con = DriverManager.getConnection(url, user, pwd);
// Connection 객체가 생성되면 DB 연결 성공
if(con != null) {
System.out.println("DB 연결 성공!");
}
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
}
public void selectProduct() {
try {
String sql = "select * from product order by prdNo";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(sql);
while(rs.next()) {
String prdNo = rs.getString(1);
String prdName = rs.getString(2);
int prdPrice = rs.getInt(3);
String prdMaker = rs.getString(4);
String prdColor = rs.getString(5);
int ctgNo = rs.getInt(6);
System.out.format("%-10s\t %-10s\t %-4d %-20s %13s %5d\n",
prdNo, prdName, prdPrice, prdMaker, prdColor, ctgNo);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void insertProduct(ProductDTO dto) {
try {
// sql문 작성
String sql = "insert into product values(?,?,?,?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,dto.getPrdNo());
pstmt.setString(2,dto.getPrdName());
pstmt.setInt(3,dto.getPrdPrice());
pstmt.setString(4,dto.getPrdMaker());
pstmt.setString(5,dto.getPrdColor());
pstmt.setInt(6,dto.getCtgNo());
int result = pstmt.executeUpdate();
if(result > 0) System.out.println("데이터 입력 성공");
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
}
}
- ProductEX 생성
package db4;
import db3.StudentDAO;
import java.util.Scanner;
public class ProductEx {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ProductDAO prdDAO = new ProductDAO();
// 학생 데이터 입력: stdentDAO 클래스의 insertStudetn() 메서드 호출
System.out.println("상품 정보 등록");
System.out.println("-------------------------\n");
System.out.print("상품 번호 입력: ");
String prdNo = scan.nextLine();
System.out.print("상품명 입력: ");
String prdName = scan.nextLine();
System.out.print("상품 가격 입력: ");
int prdPrice = scan.nextInt();
scan.nextLine();
System.out.print("상품 브랜드 입력: ");
String prdMaker = scan.nextLine();
System.out.print("상품 색깔 입력: ");
String prdColor = scan.nextLine();
System.out.print("카테고리 번호 입력: ");
int ctgNo = scan.nextInt();
ProductDTO prdDTO = new ProductDTO(prdNo, prdName, prdPrice, prdMaker, prdColor, ctgNo);
prdDAO.insertProduct(prdDTO);
prdDAO.selectProduct();
}
}
'프로그래밍 언어 > 데이터베이스' 카테고리의 다른 글
데이터베이스 Day7 - Java + DB 연동(3) (0) | 2021.11.26 |
---|---|
데이터베이스 Day5 - Java + DB 연동(1) (0) | 2021.11.24 |
데이터베이스 Day5 - 데이터 제어어(DCL) (0) | 2021.11.24 |
데이터베이스 Day5 - SQL에서의 각종 함수 (0) | 2021.11.24 |
데이터베이스 Day3 - 데이터 조작어(DML) (0) | 2021.11.22 |