안드로이드 - Tcp/ip를 통한 외부 DB데이터 처리 안드로이드 이야기2013. 3. 28. 11:03
원본소스: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;
}
'안드로이드 이야기' 카테고리의 다른 글
안드로이드 - 전화번호부 관리 프로그램 (0) | 2013.03.28 |
---|---|
안드로이드 - Android에서의 TCP/IP 통신 (1) | 2013.03.28 |
안드로이드 - 자기 IP주소 가져오기 (0) | 2013.03.28 |
열공 안드로이드 - 안드로이드에서 db(sqlite) 쉽게 보기 (0) | 2013.03.28 |
안드로이드 - 특정 앱 설치 여부 확인 및 마켓 이동 소스 (0) | 2013.03.14 |