검색결과 리스트
글
[java] 우편번호 DB에 가져오기, 우편번호 검색기 넣는 방법
program/java
2012. 10. 5. 11:32
반응형
Q. 우편번호 검색기를 추가해보자.
인터넷을 돌아다니다 보면 회원가입 페이지에서 우편번호 검색하는 부분이 있다.
그런식으로 검색을 하기 위해선 우편번호DB 가 필요하다.
1. 우편번호DB 제공 사이트 방문
홈페이지 : http://www.zipfinder.co.kr/
우편번호DB : http://www.zipfinder.co.kr/zipcode/index.html
"우편번호 원본파일" 메뉴를 클릭하면 우편번호DB 파일이 보여진다.
2. 우편번호DB 선택
각 메뉴중 자기가 필요한 파일을 선택하여 다운받는다.
필자는 Type 3(txt) 로 하였다.
3. DB 만들기
위에서 받은 파일 각 Type의 컬럼 대로 테이블을 생성한다.
예) Type 3
CREATE TABLE POST ( SEQ INTEGER NOT NULL , ZIPCODE CHAR(7) NULL , SIDO VARCHAR2(30) NULL , GUGUN VARCHAR2(30) NULL , DONG VARCHAR2(30) NULL , RI VARCHAR2(50) NULL , ST_BUNJI VARCHAR2(10) NULL , ED_BUNJI VARCHAR2(10) NULL ); ALTER TABLE POST ADD PRIMARY KEY (SEQ);
4. DB파일을 INSERT 하기 좋게 변환
DB파일을 열어 처리하게 쉽게 변환한다.
1번 라인의 컬럼명을 지운다.
예)Type 3
(ZIPCODE SIDO GUGUN DONG RI ST BUNJI ED_BUNJI SEQ) 삭제
그리고 맨 마지막 빈공간 라인을 삭제한다.
맨 마지막 라인의 데이터가 존재해야한다.
마지막으로 탭으로 구분되어 있는 구분기호를 '|' 로 바꾼다.
메모장이나 텍스트에디터로 탭을 -> '|' 기호로 전체를 바꾼다.
5. 프로그래밍을 해서 DB에 INSERT 한다.
import java.io.*; import java.sql.*; public class PostalNumberMig { public static void main( String[] args ) throws Exception { Class.forName( "oracle.jdbc.driver.OracleDriver" ); PreparedStatement stmt = null; Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:ORCL", "id", "pw" ); try { conn.setAutoCommit( true ); stmt = conn.prepareStatement( "INSERT INTO POST( SEQ, ZIPCODE, SIDO, GUGUN, DONG, RI, ST_BUNJI, ED_BUNJI ) VALUES( ?, ?, ?, ?, ?, ?, ?, ? ) " ); BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( "post1.txt" ), "euc-kr" ) ); try { int totCnt = 0; int cnt = 0; String s; long start = System.nanoTime(); while( ( s = reader.readLine() ) != null ) { totCnt++; int charCnt = 0; int seq = totCnt; String zipcode = s.substring( 0, 7 ); charCnt = zipcode.length() + 1; String sido = s.substring( charCnt, s.indexOf( '|', charCnt ) ); charCnt += sido.length() + 1; String gugun = s.substring( charCnt, s.indexOf( '|', charCnt ) ); charCnt += gugun.length() + 1; String dong = s.substring( charCnt, s.indexOf( '|', charCnt ) ); charCnt += dong.length() + 1; String ri = s.substring( charCnt, s.indexOf( '|', charCnt ) ); charCnt += ri.length() + 1; String st_bunji = s.substring( charCnt, s.indexOf( '|', charCnt ) ); charCnt += st_bunji.length() + 1; String ed_bunji = s.substring( charCnt, s.indexOf( '|', charCnt ) ); stmt.setInt( 1, seq ); stmt.setString( 2, zipcode.trim() ); stmt.setString( 3, sido.trim() ); stmt.setString( 4, gugun.trim() ); stmt.setString( 5, dong.trim() ); stmt.setString( 6, ri.trim() ); stmt.setString( 7, st_bunji.trim() ); stmt.setString( 8, ed_bunji.trim() ); stmt.addBatch(); cnt++; if( cnt == 50000 ) { cnt = 0; stmt.executeBatch(); } } if( cnt > 0 ) stmt.executeBatch(); long end = System.nanoTime(); System.out.println( ( end - start ) + "(ns)" ); } finally { reader.close(); } conn.commit(); } finally { if( stmt != null ) try { stmt.close(); } catch( Exception e ) { } conn.close(); } } }
반응형
'program > java' 카테고리의 다른 글
[java] Iterator 사용법과 성능 비교 (0) | 2012.10.07 |
---|---|
[java] for 문의 각 Operator(Inner Size, Outer Size, Colon Operator) 별 속도 차이 (0) | 2012.10.07 |
[java] for 문에서 객체의 size 선언법 (0) | 2012.10.05 |
[java] 문자열(String) 나누기, Split VS SubString (0) | 2012.10.05 |
[java] DB에 다량건 데이터 INSERT 시 excuteBatch() 사용 (0) | 2012.10.05 |