메뉴 건너뛰기

조회 수 9407 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

오늘은 친구한테 너무좋은 자료를 받아서 기억시켜놓기 위해 포스팅한다. 

 

똑똑한 친구네... 더 분발하며 분석해야 겠다. 

 

많이 삽질 펐지만 ,, 다른 사람들은 안그러길 바라며,,, 꼼꼼히 적어 놓아야겠다. 

 

일단 무엇보다도 안드로이드에서는 mysql로 직접적인 쿼리를 가져오는 것은 불가능하다.

 

그래서 안드로이드>>php>>mysql 이런형식으로 불러야한다. 

 

그럼 코드를 분석해보도록하자. 

 

 

DBManager.java

package com.example.navermap;

import java.io.BufferedReader;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class DBmanager {

 String result = "";
 //쿼리문을 등록한다. 
 ArrayList<NameValuePair> nameValuePairs;

 public DBmanager(){
  //the year data to send
  nameValuePairs = new ArrayList<NameValuePair>();

 }
 public JSONArray requestQuery(String sql){

  InputStream is = null;
  //쿼리를 가져와서 php로 연결할 준비를 한다. 
  nameValuePairs.add(new BasicNameValuePair("sql",sql));

  //http post
  try{ 
   //client 로 일단 연결하도록하자. 
   HttpClient httpclient = new DefaultHttpClient();
   //자신의 도메인과 php파일을 연결해주도록한다.
   //디버깅 과정은 httpost에서 php로  옮겨가면된다. 
   HttpPost httppost = new HttpPost("도메인/getter.php");
   //입력한 쿼리문을 인코딩한다. 
   httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
   //실행과 동시에 리턴값을 받아낸다. 
   HttpResponse response = httpclient.execute(httppost);
   //결과가 잘 왔는지 확인한다. 
   HttpEntity entity = response.getEntity(); 
   is = entity.getContent();
  }catch(Exception e){
   Log.e("log_tag", "Error in http connection "+e.toString());
  }

  Log.e("log_tag", "result: "+result);
  
  //convert response to string
  try{
   //여기서는 포맷때문에 고생을많이했는데,
   //표준인 utf-8로 설정한다. 두번째 매개변수는 버퍼크기인듯 하다. 
   BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
   StringBuilder sb = new StringBuilder();
   String line = null;
   
   while ((line = reader.readLine()) != null) {
    Log.e("log_tag", "line: "+line);
    sb.append(line + "\n");
   }
   is.close();
   result=sb.toString();
   Log.e("log_tag", "result: "+result);
   
  }catch(Exception e){
   Log.e("log_tag", "Error converting result "+e.toString());
  }

  //parse json data
  try{
   if(result.equals("1\n")) Log.e("DBERROR", "connection error");
   if(result.equals("2\n")) Log.e("DBERROR", "db selection error");
   if(result.equals("3\n")) Log.e("DBERROR", "request error");
   if(result.equals("4\n")) Log.e("DBERROR", "sql query error");

   else {
    //주석을 제거할경우 가져온 값 스트링으로 표시한다. 
    JSONArray jArray = new JSONArray(result);
    /* for(int i=0;i<jArray.length();i++){
     JSONObject json_data = jArray.getJSONObject(i);
     Log.i("log_tag","id: "+json_data.getInt("id"));
    }*/
    return jArray;
   }
  }catch(JSONException e){
   Log.e("log_tag", "Error parsing data "+e.toString());
  }
  return null;
 }

 public boolean sendQuery(String sql){

  InputStream is = null;
  //이번에도 쿼리를 저장하고 ,
  nameValuePairs.add(new BasicNameValuePair("sql",sql));

  //http post
  try{ 
   //이번에도 경우도 위와 같다. 
   HttpClient httpclient = new DefaultHttpClient();
   //이줄뒤에 php문으로 분석하면된다. 
   HttpPost httppost = new HttpPost("도메인/setter.php");
   httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
   HttpResponse response = httpclient.execute(httppost);
   HttpEntity entity = response.getEntity();
   is = entity.getContent();
  }catch(Exception e){
   Log.e("log_tag", "Error in http connection "+e.toString());
  }
  
  //convert response to string
  try{
   BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
   StringBuilder sb = new StringBuilder();
   String line = null;
   while ((line = reader.readLine()) != null) {
    sb.append(line + "\n");
   }
   is.close();
   result=sb.toString();

  }catch(Exception e){
   Log.e("log_tag", "Error converting result "+e.toString());
  }
  
  
  if(result.equals("1\n")) Log.e("DBERROR", "connection error");
  if(result.equals("2\n")) Log.e("DBERROR", "db selection error");
  if(result.equals("3\n")) Log.e("DBERROR", "request error");
  if(result.equals("4\n")) Log.e("DBERROR", "sql query error");
  if(result.equals("5\n")){
   Log.i("DB", "query success");
   
   return true;
  }
  
  return false;
 }
}
 

 

 

 

다음으로 php를 살펴보자

 

php문은 그냥막저장하면안되고, 포맷에 주의하도록하자

utf-8형식으로 저장하였다. 

 

setter.php

 


<?php
$conn = mysql_connect('도메인','아디','비번');
if(!$conn){
echo "1";
exit();
}
if(!mysql_select_db('디비명')){
echo "2";
exit();
}
$sql = $_REQUEST['sql'];
//이부분이 쿼리를 요청하는는단계이다. 
//아까 자바에서 보면, nameValuePair이부분에서 받은 sql쿼리가 이부분에서 받게된다.
$sql=stripslashes($sql);
//이것은 /등의 특수문자를 제거해 주는것이다. 
$q=mysql_query($sql) or die("3");
if(!$q) die("4");
echo "5";
mysql_close();
?>


 

<?php
$conn = mysql_connect('디비명','아디','비번');

if(!$conn){
echo "1";
exit();
}

if(!mysql_select_db('디비명',$conn)){
echo "2";
exit();
}
//위와같다. 이부분은 아까한 안드로이드에서 받아온 쿼리를 처리한다.
$sql = $_REQUEST['sql'];

$sql=stripslashes($sql);
$q=mysql_query($sql,$conn) or die ("3");
if(!$q) die("4");
$arr = array();
//결과값을 저장하기위한것이다. 첫번쨰는 행으로 
while($row = mysql_fetch_assoc($q)) {
 foreach($row as &$v) { 
//이부분은 열 부분이다. 
//포맷문제가 생기면 해결하기위해 iconv를 사용한다. euc-kr을 utf-8로 설정한다. 
  //$v = iconv("euc-kr", "utf-8", $v);  // encode each value.
 }
   //해당 어레이에 각각해당 열을 arr형태로 저장한다. 
    $arr[] = $row;
}
//그것을 json으로 뿌리고,안드로이드에서는 가져간다. 
echo json_encode($arr);
mysql_close();
?>

List of Articles
번호 제목 날짜 조회 수
237 HTML5로 나만의 비디오 플레이어 스킨 만들기 -2- JavaScript file 2014.09.04 6312
236 HTML5로 나만의 비디오 플레이어 스킨 만들기 -3- JavaScript file 2014.09.04 6288
235 HTML5 드래그 앤 드롭 하기 Drag and Drop file 2014.09.04 7748
234 HTML5 Web Storage -01- file 2014.09.04 5587
233 HTML5 Form 공부하기 -1- file 2014.09.04 5841
232 HTML5 Form 공부하기 -2- file 2014.09.04 6329
231 HTML5로 게임 만들기 워밍업 file 2014.09.04 6063
230 HTML5 Better semantic tags file 2014.09.04 5952
229 HTML5 Geolocation (구글 지도에 현위치 표시하기) file 2014.09.04 6810
228 jQuery ajax post 요청 text 응답 2014.10.16 6702
227 JSON(JavaScript Object Notation) - jQuery Ajax - jQuery.getJSON() 메서드 (비동기적으로 JSON파일 로드) file 2014.10.16 6568
226 jQuery Ajax - jQuery.load() 메서드 (동적으로 원격 페이지 로드) file 2014.10.16 6409
225 트리뷰(TreeView) 컨트롤 file 2014.10.16 6722
224 Effects - Stop() 메서드 (애니메이션 효과 멈추기) file 2014.10.16 6225
223 Effects - Animate() 메서드 (여러가지 효과 동시 처리) file 2014.10.16 30630
222 Effects - SlideToggle() 메서드 (슬라이드 업/다운) file 2014.10.16 6760
221 Effects - SlideUp() 메서드 (슬라이드업) file 2014.10.16 5999
220 Effects - FadeIn() / FadeOut() 메서드 (서서히 보이기 및 숨기기) file 2014.10.16 6069
219 Effects - Show() / Hide() 메서드 (보이기 및 숨기기) file 2014.10.16 5957
218 Events - Unbind() 메서드 (이벤트 처리기 해제) file 2014.10.16 5749
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved