ArrayList 연습문제 -1
- 4개의 단어를 입력받고 가장 긴 단어와 단어의 길이를 출력하는 프로그램 작성
ArrayListTest1.java
package list;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListTest1 {
public static void main(String[] args) {
ArrayList<String> a = new ArrayList<String>();
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 4; i++) {
System.out.print("단어 입력: : ");
String s = scanner.next();
a.add(s);
}
System.out.println("-----------------------------");
int longestIndex = 0;
System.out.print("단어 리스트: ");
for (int i = 0; i < a.size(); i++) {
String name = a.get(i);
System.out.print(name + " ");
if (a.get(longestIndex).length() < a.get(i).length())
longestIndex = i;
}
System.out.println("\n가장 긴 단어 : " + a.get(longestIndex));
System.out.println("가장 긴 단어길이 : " + a.get(longestIndex).length());
}
}
ArrayList 연습문제 -2
Employee.java
package list;
public class Employee {
int id;
String name;
double salary;
public Employee(int id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return id + "-" + name + "-" + salary;
}
}
ArrayListEmployMain.java
package list;
import java.util.ArrayList;
public class ArrayListEmployMain {
public static void main(String[] args) {
ArrayList<Employee> list = new ArrayList<Employee>(5);
Employee e1 = new Employee(100, "김사원", 3000.55);
Employee e2 = new Employee(100, "박대리", 4000.55);
Employee e3 = new Employee(100, "최과장", 6000.55);
list.add(e1);
list.add(e2);
list.add(e3);
System.out.println("리스트 출력");
System.out.println(list);
for(int i = 0; i<list.size(); i++){
Employee emp = list.get(i);
System.out.println(emp); // System.out.println(list.get(i)); 로 해도 출력값 동일
}
}
}
ArrayList 연습문제 -3
- ArrayList에 StudentDTO 객체 저장
- db5 패키지 복사해서 다음과 같이 변경
- DAO 클래스의 selectStudent() 메서드에서 한 행씩 출력
- 모든 행을 ArrayList에 담아서 StudentSelect 클래스의 select() 메서드에게 반환
- select() 메서드에서 출력
StudentDAO.java
- selectStudent() 메서드의 반환형을 ArrayList변경
- DTO를 담을 ArrayList<StringDTO> 객체 생성: dataSet
- resultSet에서 하나씩 가져와서 DTO 생성하고 DTO를 ArrayList에 add()
- return dataSet;
public class StudentDAO {
// ...
public ArrayList<StudentDTO> selectStudent() {
ArrayList<StudentDTO> dataSet = null; // try 안과 밖에서 사용
try {
// sql 직성
String sql = "select * from student order by stdNo";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(sql);
dataSet = new ArrayList<StudentDTO>();
while(rs.next()) {
dataSet.add(new StudentDTO(rs.getString(1),
rs.getString(2),
rs.getInt(3),
rs.getString(4),
rs.getDate(5).toString(),
rs.getString(6)
)); // DTO 1개가 1행에 해당당
}
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
return dataSet; // ArrayList<StudentDTO> 반환
}
// ...
}
StudentSelect.java
package db5;
import java.util.ArrayList;
public class StudentSelect {
public void studentSelect(){
StudentDAO stdDAO = new StudentDAO();
ArrayList<StudentDTO> dataSet = new ArrayList<StudentDTO>();
dataSet = stdDAO.selectStudent();
System.out.println("제목 출력 알아서,,,");
for(StudentDTO dto : dataSet) {
System.out.println(dto);
}
}
}
StudentDTO.java
- toString() 추가 : StringBuilder 사용
public class StudentDTO {
// ...
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(stdNo);
builder.append("\t");
builder.append(stdName);
builder.append("\t");
builder.append(stdYear);
builder.append("\t");
builder.append(stdAddress);
builder.append("\t");
builder.append(stdBirthday);
builder.append("\t");
builder.append("\t");
builder.append(dptNo);
return builder.toString();
}
}
ArrayList 연습문제 -4
- ArrayList에 Product객체 저장
- db4 패키지 복사해서 다음과 같이 변경
- DAO 클래스의 selectProduct() 메서드에서 한 행씩 출력
- 모든 행을 ArrayList에 담아서 ProductSelect 클래스의 select() 메서드에게 반환
- select() 메서드에서 출력
ProductDAO.java
public class ProductDAO {
// ...
public ArrayList<ProductDTO> selectProduct() {
ArrayList<ProductDTO> dataSet = null;
try {
String sql = "select * from product order by prdNo";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(sql);
dataSet = new ArrayList<ProductDTO>();
while(rs.next()) {
dataSet.add(new ProductDTO(rs.getString(1),
rs.getString(2),
rs.getInt(3),
rs.getString(4),
rs.getString(5),
rs.getInt(6)
));
}
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
return dataSet;
}
// ...
}
ProductEx.java
public class ProductEx {
// ...
ArrayList<ProductDTO> dataSet = new ArrayList<ProductDTO>();
dataSet = prdDAO.selectProduct();
System.out.println("상품 정보 출력");
for(ProductDTO dto: dataSet) {
System.out.println(dto);
}
}
ProductDTO.java
public class ProductDTO {
// ...
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(prdNo);
builder.append("\t");
builder.append(prdName);
builder.append("\t");
builder.append(prdPrice);
builder.append("\t");
builder.append(prdMaker);
builder.append("\t");
builder.append(prdColor);
builder.append("\t");
builder.append(ctgNo);
return builder.toString();
}
}
ArrayList 연습문제 -5 (Interface 사용)
- 기존의 StudentDAO 클래스를 인터페이스 IStudentDAO를 구현한 클래스로 변경
- 인터페이스 생성: IStudentDAO
- 추상 메서드(바디 없이 선언된 메서드. 바디는 인터페이스를 구현한 클래스에서 작성)만 선언
- public ArrayList<StudentDTO> selectStudetn();
- pubilc void insertStudent(StudentDTO dto);
- IStudentDAO를 구현한 클래스 StudentDAO 생성
- 나머지 파일들은 변동 없음
IStudentDAO.java
package interface_student;
import java.util.ArrayList;
// 인터페이스: 표준 규격을 정해놓은 것
// 인터페이스를 구현하는 클래스에서 정의된 메서드를 반드시 구현해야 함
// @Override 오버라이드 해야 함
public interface IStudentDAO {
// 추상 메서드 (바디 없음)
// IStudentDAO 인터페이스를 구현하는 클래스에서 반드시 구현해야 함
public ArrayList<StudentDTO> selectStudent();
public void insertStudent(StudentDTO dto);
}
StudentDAO.java
package interface_student;
import java.sql.*;
import java.util.ArrayList;
public class StudentDAO implements IStudentDAO{
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() 메서드
@Override
public ArrayList<interface_student.StudentDTO> selectStudent() {
ArrayList<interface_student.StudentDTO> dataSet = null; // try 안과 밖에서 사용
try {
// sql 작성
String sql = "select * from student order by stdNo";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(sql);
dataSet = new ArrayList<interface_student.StudentDTO>();
while(rs.next()) {
dataSet.add(new interface_student.StudentDTO(rs.getString(1),
rs.getString(2),
rs.getInt(3),
rs.getString(4),
rs.getDate(5).toString(),
rs.getString(6)
)); // DTO 1개가 1행에 해당당
}
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
return dataSet; // ArrayList<StudentDTO> 반환
}
//(3) insertStudent(StudentDTO dto)
@Override
public void insertStudent(interface_student.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();
}
}
public void updateStudent(interface_student.StudentDTO dto){
try {
// sql문 작성
String sql = "update student set stdName=?, stdYear=?, stdAddress=?, stdBirthday=?, dptNo=? where stdNo=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,dto.getStdName());
pstmt.setInt(2,dto.getStdYear());
pstmt.setString(3,dto.getStdAddress());
pstmt.setString(4,dto.getStdBirthday());
pstmt.setString(5,dto.getDptNo());
pstmt.setString(6,dto.getStdNo());
int result = pstmt.executeUpdate();
if(result > 0) System.out.println("데이터 수정 성공");
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
}
}