zipDAO
public class zipDAO {
private String seq;
private String zipcode;
private String sido;
private String gugun;
private String dong;
private String ri;
private String st_bunji;
private String ed_bunji;
public String getSeq() {
return seq;
}
public void setSeq(String seq) {
this.seq = seq;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getSido() {
return sido;
}
public void setSido(String sido) {
this.sido = sido;
}
public String getGugun() {
return gugun;
}
public void setGugun(String gugun) {
this.gugun = gugun;
}
public String getDong() {
return dong;
}
public void setDong(String dong) {
this.dong = dong;
}
public String getRi() {
return ri;
}
public void setRi(String ri) {
this.ri = ri;
}
public String getSt_bunji() {
return st_bunji;
}
public void setSt_bunji(String st_bunji) {
this.st_bunji = st_bunji;
}
public String getEd_bunji() {
return ed_bunji;
}
public void setEd_bunji(String ed_bunji) {
this.ed_bunji = ed_bunji;
}
}
zipTable
import javax.swing.table.AbstractTableModel;
public class zipTable extends AbstractTableModel {
//컬럼의 이름
String[] columNames = {"일련번호","우편번호","시.도","구.군","동","리","앞번지","뒷번지"};
//데이터
Object[][] data = {{" ", " "," "," "," "," "," "," "}};
public zipTable(){
}
public zipTable(Object[][] data) {
this.data = data;
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return columNames.length;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return data.length; //2차 배열의 길이
}
@Override
public Object getValueAt(int arg0, int arg1) {
// TODO Auto-generated method stub
return data[arg0][arg1];
}
@Override
public String getColumnName(int arg0) {
// TODO Auto-generated method stub
return columNames[arg0];
}
}
zipControl
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class zipControl {
Connection conn;
PreparedStatement pstmt;
ResultSet rs;
//======================================================================================
// 데이터베이스 연결
public void connectionDB() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "hr", "hr");
} catch (ClassNotFoundException e) {
} catch (SQLException e) {
}
}
// 데이터베이스 연결종료
public void disconnectionDB() {
try {
if(pstmt != null) pstmt.close();
if(rs != null) rs.close();
if(conn != null) conn.close();
} catch (SQLException e) {
}
}
//========================================================================================
public ArrayList<zipDAO> searchAddress(String dong) {
ArrayList<zipDAO> addressList = new ArrayList<>();
try {
String query = "select seq, zipcode, sido, gugun, dong, nvl(ri, ' ') ri1, nvl(st_bunji, ' ') st_bunji1, nvl(ed_bunji, ' ') ed_bunji1 from zipcode where dong like \'%"+ dong +"%\'";
pstmt = conn.prepareStatement(query);
rs = pstmt.executeQuery();
while(rs.next()){
zipDAO zipcode = new zipDAO();
zipcode.setSeq(rs.getString("seq"));
zipcode.setZipcode(rs.getString("zipcode"));
zipcode.setSido(rs.getString("sido"));
zipcode.setGugun(rs.getString("gugun"));
zipcode.setDong(rs.getString("dong"));
zipcode.setRi(rs.getString("ri1"));
zipcode.setSt_bunji(rs.getString("st_bunji1"));
zipcode.setEd_bunji(rs.getString("ed_bunji1"));
addressList.add(zipcode);
}
} catch (SQLException e) {
}
return addressList;
}
}
zipInter (Client)
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
public class zipSearch_Inter extends JFrame {
private JPanel contentPane;
private JTextField dong_text;
private JTable table;
private JButton btnNewButton;
private JScrollPane scrollPane;
//입력과 출력만 이루어지는 "클라이언트" 프로그램
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
zipSearch_Inter frame = new zipSearch_Inter();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public zipSearch_Inter() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 483, 339);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
dong_text = new JTextField();
dong_text.setText("개포1동");
dong_text.setBounds(12, 10, 159, 21);
contentPane.add(dong_text);
dong_text.setColumns(10);
btnNewButton = new JButton("검색");
//검색 클릭!!============================================================
btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
searchDong(dong_text.getText());
}
});
btnNewButton.setBounds(177, 9, 97, 23);
contentPane.add(btnNewButton);
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(null, "상세주소", TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel.setBounds(6, 40, 455, 258);
contentPane.add(panel);
panel.setLayout(null);
scrollPane = new JScrollPane();
scrollPane.setBounds(6, 17, 443, 234);
panel.add(scrollPane);
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null, null, null, null, null, null},
},
new String[] {
"\uC77C\uB828\uBC88\uD638", "\uC6B0\uD3B8\uBC88", "\uC2DC.\uB3C4", "\uAD6C.\uAD70", "\uB3D9", "\uB9AC", "\uC55E\uBC88\uC9C0", "\uB4B7\uBC88\uC9C0"
}
));
scrollPane.setViewportView(table);
}
//검색한 값을 서버로 보내주는 메서드
public void searchDong(String dong){
Socket socket = null;
BufferedReader br = null; //서버에서 보낸 메세지 읽기
BufferedWriter bw = null; //서버에 보낼 메세지
try {
System.out.println("서버에 연결 중입니다.");
socket = new Socket("192.168.1.145", 7777);
System.out.println("서버에 연결되었습니다.");
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //output!
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bw.write(dong + "\n"); //보낼값("dong")
bw.flush();
zipDAO zipcode = new zipDAO();
String returnMsg = null;
returnMsg = br.readLine();
String[] returnMsg_split = new String[2000];
int a = 0;
//한줄로 합쳐진 데이터를 받아서 한 레코드씩 나눠줌 (구분자 : #)
String[] datas = returnMsg.split("#");
for(String data : datas){
returnMsg_split[a] = data.toString();
System.out.println(returnMsg_split[a]);
a++;
}
//위에서 레코드별로 나눠진 값(a)을 받아서 전달 받은 레코드의 갯수를 파악!(테이블 행의 최대값을 알 수 있음)
Object[][] arrAdd = new Object[a-1][8];
//각 레코드를 칼럼별로 나눠줌(구분자 : ,)
for (int i = 1 ; i < a ; i++) {
System.out.println(returnMsg_split[i]);
String[] data_split = returnMsg_split[i].split(",");
System.out.println(data_split[0].toString());
System.out.println(data_split[1].toString());
System.out.println(data_split[2].toString());
System.out.println(data_split[3].toString());
System.out.println(data_split[4].toString());
System.out.println(data_split[5].toString());
System.out.println(data_split[6].toString());
System.out.println(data_split[7].toString());
//zipTable에 데이터 넣기
zipcode.setSeq(data_split[0].toString());
zipcode.setZipcode(data_split[1].toString());
zipcode.setSido(data_split[2].toString());
zipcode.setGugun(data_split[3].toString());
zipcode.setDong(data_split[4].toString());
zipcode.setRi(data_split[5].toString());
zipcode.setSt_bunji(data_split[6].toString());
zipcode.setEd_bunji(data_split[7].toString());
//zipTable에서 데이터 가져와서 테이블에 띄우기
arrAdd[i-1][0] = zipcode.getSeq();
arrAdd[i-1][1] = zipcode.getZipcode();
arrAdd[i-1][2] = zipcode.getSido();
arrAdd[i-1][3] = zipcode.getGugun();
arrAdd[i-1][4] = zipcode.getDong();
arrAdd[i-1][5] = zipcode.getRi();
arrAdd[i-1][6] = zipcode.getSt_bunji();
arrAdd[i-1][7] = zipcode.getEd_bunji();
table.setModel(new zipTable(arrAdd));
}
} catch (UnknownHostException e) {
} catch (IOException e) {
} finally{
if ( br != null) try{br.close();} catch(IOException e){}
if ( bw != null) try{bw.close();} catch(IOException e){}
if(socket != null) try{socket.close();} catch(IOException e){}
}
}
}
zipOper (Server)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream.GetField;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
//검색이 이루어 지는 "서버"쪽 프로그램
public class zipSearch_Operate {
public static void main(String[] args) {
String message = null;
ServerSocket serverSocket = null;
Socket socket = null;
BufferedWriter bw = null; //데이터 쓰기
BufferedReader br = null; //데이터 받기
//소켓 준비
try {
serverSocket = new ServerSocket(7777); //7777번 포트로 대기중
System.out.println("서버가 준비되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
while(true){
try {
socket = serverSocket.accept();
System.out.println("클라이언트가 연결되었습니다 - " + socket.getInetAddress());
br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //input
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
message = br.readLine(); //받은값
System.out.println("받은값 : " + message);
//DB 처리==========================================================
//DB연결
zipControl controller = new zipControl();
controller.connectionDB();
ArrayList<zipDAO> addressList = controller.searchAddress(message);
// Object[][] arrAdd = new Object[addressList.size()][8];
String arrAdd = null;
String arrAddSum = "========#";
for(int i = 0 ; i < addressList.size() ; i++){
zipDAO zipcode = addressList.get(i);
arrAdd = zipcode.getSeq() + "," + zipcode.getZipcode()+ "," +zipcode.getSido()+ "," +zipcode.getGugun()+ "," +zipcode.getDong() + "," + zipcode.getRi() + "," + zipcode.getSt_bunji() + "," + zipcode.getEd_bunji() + "#";
arrAddSum = arrAddSum + arrAdd;
}
System.out.println(arrAddSum);
bw.write(arrAddSum + "\n");
bw.flush(); //출력 버퍼를 비우는 메서드! (반드시 써줄것!)
//DB해제
controller.disconnectionDB();
}
catch (IOException e) {
e.printStackTrace();
} finally {
if ( br != null) try{br.close();} catch(IOException e){}
if ( bw != null) try{bw.close();} catch(IOException e){}
if ( socket != null) try{socket.close();} catch(IOException e){}
}
}
}
}
출력물
'JAVA' 카테고리의 다른 글
클래스, 메서드, 상수의 이름 명명 규칙 (0) | 2013.03.05 |
---|---|
생성자(construntor) 기본 (final 멤버변수 초기화, 디폴트 생성자) (0) | 2013.03.05 |
Socket, ServerSocket 기본실습 : Echo 프로그램 (0) | 2013.02.28 |
Socket, ServerSocket 기본실습 : 데이터 주고 받기 (서버쪽 계속 열어놓기) (0) | 2013.02.28 |
Socket, ServerSocket 기본실습 : 데이터 주고 받기 (0) | 2013.02.28 |