[Java] Java로 mysql에 insert하기

Coastby·2022년 10월 23일
0

LIKELION Back-End School

목록 보기
44/61

앞에서 java와 mysql을 연동하였다.

더 나아가서 csv 파일로 저장된 데이터를 mysql에 insert를 도전하였다.

이전에 서울시 병원 csv 파일로 db를 만드는 실습을 하였는데, 동일한 데이터를 이용하여 db를 만들었다.

하나의 insert를 할 때는 executeUpdate()를 사용하였다. 하지만 여러개를 입력할 때는 addBatch()를 해서 쿼리를 실행하지 않고 쿼리 구문을 메모리에 올려두었다가, executeBatch()로 DB에 모두 전송한다.

	//csv filename 입력하면 sql로 저장
    public void add(String filename) throws SQLException, ClassNotFoundException, IOException {
        ConnectionMaker cm = new ConnectionMaker();
        //LineReader : csv 파일을 받아서 Hospital 객체 리스트로 반환하는 메서드
        LineReader lr = new LineReader(new HospitalParser());
        Connection conn = cm.makeConnection();
        PreparedStatement ps = conn.prepareStatement("INSERT INTO seoul_hospital(id, address, district, category, emergency_room, name, subdivision)"
                +"VALUES (?, ?, ?, ?, ?, ?, ?);");

        List<Hospital> hospitals= lr.readLines(filename);
        //반환된 리스트로 sql 구문을 완성한다.
        for (Hospital hospital : hospitals) {
            ps.setString(1, hospital.getId());
            ps.setString(2, hospital.getAddress());
            ps.setString(3, hospital.getDistrict());
            ps.setString(4, hospital.getCategory());
            ps.setInt(5, hospital.getEmergencyRoom());
            ps.setString(6, hospital.getName());
            ps.setString(7, hospital.getSubdivision());
            //쿼리를 저장했다가 한 번에 실행
            ps.addBatch();
            ps.clearParameters();
            //실행을 확인하기 위한 출력구문
            System.out.println(hospital.getId()+"이 저장되었습니다.");
        }
        ps.executeBatch();
        ps.clearBatch();

        ps.close();
        conn.close();
    }
    
    
    //테스트 코드로 진행하지 않고 main메서드로 테스트...(메인 메서드가 익숙할 때라..)
    public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
        HospitalDao hd = new HospitalDao();
        String filename = "../data/서울병원3개.csv";
        hd.add(filename);
    }

⭕️ 에러

문제)
데이터에서 id가 길지 않은데 크기가 초과한다는 에러가 반복해서 발생하였다. 그리고 나머지 데이터만 저장되었다.

해결)
위의 코드와는 상관없이 LineReader에서 첫 번째 줄은 제목이라 파싱을 하지 않는 코드가 있는데 이 것이 문제가 되었다. 그래서 csv에 제목을 달아주고 진행하였더니 해결되었다.

profile
훈이야 화이팅

0개의 댓글