달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
728x90
반응형
안드로이드 - Tcp/ip를 통한 외부 DB데이터 처리

원본소스:http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=7458&MAEULNO=911&no=54224&page=1

 

클라이언트 - 서버 - DB로 처리하는 방식입니다.

 

클라이언트

package com.net1;

import android.app.Activity;

import android.os.Bundle;

import android.view.*;

import android.widget.*;

public class MainApp extends Activity {

ListView lstView;

     

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        lstView = (ListView)findViewById(R.id.lstView);

    }

   

    public void chulbal(View v){

       //Toast.makeText(this, "시작", 2000).show();

       Connect connect = new Connect();

       connect.connect_server();

      

      if(v.getId() == R.id.btnCall){ //단순 서버 호출

             connect.send("good");      //호출

             String message = connect.read();   //반환값 얻기

             Toast.makeText(this, message, Toast.LENGTH_SHORT).show();

      }else if(v.getId() == R.id.btnSelect){ //DB 자료 요청

             String[] items = connect.selectData();

             ListAdapter adapter = new ArrayAdapter<String>(this,

                        android.R.layout.simple_list_item_1, items);

             lstView.setAdapter(adapter);

       }

      

       connect.connect_close();

    }

}

 

 

Connect.java -----------

package com.net1;

import java.io.*;

import java.net.*;

import java.util.*;

import android.util.*;

public class Connect {

      private Socket socket;

      private BufferedReader in;

      private PrintWriter out;

 

      public void connect_server() {

            try {

                  socket = new Socket("xxx.xxx.xxx.xxx", 8888);

 

                  in = new BufferedReader(new InputStreamReader(socket

                             .getInputStream(), "UTF-8"));

 

                  out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8")), true);

            } catch (Exception e) {

                  Log.i("disp", "connect_server err : " + e);

            }

      }

 

      public void send(String message) { // 메세지 전송(서버 호출)

            try {

                  out.println(message);

                  out.flush();

            } catch (Exception e) {

                  Log.i("disp", "send err : " + e);

            }

      }

 

      public String read() { // 메세지 수신(서버로부터)

            try {

                  String message = in.readLine();

                  return message;

            } catch (Exception e) {

                  Log.i("disp", "read err : " + e);

                  return "read err:" + e.getMessage();

            }

      }

 

      public void connect_close() {

            try {

                  in.close();

                  out.close();

                  socket.close();

            } catch (Exception e) {

            }

      }

 

      public String[] selectData() { // DB 자료 반환

            String[] items = null;

            try {

                  out.println("selectData"); // 서버에 DB 자료 요청

                  String result = in.readLine();

 

                  if (!result.equals("select_err")) {

                      StringTokenizer st = new StringTokenizer(result, "$");

                      Log.i("disp", "ssssss : " + st.countTokens());

                      items = new String[st.countTokens()];

                      for (int i = 0; i < items.length; i++) {

                          items[i] = st.nextToken();

                      }

                  }

            } catch (Exception e) {

                  Log.i("disp", "selectData err : " + e);

            }

            return items;

      }

}

 

selectData 는 서버에서 명령문으로 받아 특정 테이블에 데이터를 넘겨받는 방식으로

구성되어 있습니다.

sql문장 전체를 넘겨 서버에서 리턴값만 받는 방식으로 하셔도 됩니다.

 

테스트라 간단하게 구성하였습니다.

 

아래는 서버의 일부 반환 소스입니다.

      public void process(){  //db 자료 처리  클라이언트로 전달

            ArrayList<String> list = new ArrayList<String>();

            DbConnect dbConnect = new DbConnect();

            list = dbConnect.selectData();

           

            if(list.isEmpty()){

                  send("select_err");

            }else{

                  String data = "";

                  for(String s : list){

                        data += s + "$";                   }

                  send(data);

            }

      }

 

      public ArrayList<String> selectData(){

            ArrayList<String> list = new ArrayList<String>();

            String sql = "select a, b, c from test";

           

            try {

                  pstmt = conn.prepareStatement(sql);

                  rs = pstmt.executeQuery();

                 

                  while(rs.next()){

                        String data = rs.getString(1) + " " +

                             rs.getString(2) + " " + rs.getString(3);

                        list.add(data);

                  }

            } catch (Exception e) {

                  System.out.println("selectData 오류 : " + e);

            } finally{

                  try {

                        if(rs !=null) rs.close();

                        if(pstmt !=null) pstmt.close();

                  } catch (Exception e2) {}

            }

           

            return list;

      }

728x90
반응형
:
Posted by mapagilove