메뉴 건너뛰기

조회 수 9479 추천 수 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
번호 제목 날짜 조회 수
» 안드로이드 php 로 mysql json 파싱 하기 2014.08.28 9479
256 FTPClient 를이용하여 ftp상 서버에서 데이터 다운로드 편 2014.08.28 9917
255 XmlPullParser 를이용하여 데이터 가져와보기!! 2014.08.28 7282
254 FTPClient 를이용한 데이터 업로드 하기 2014.08.28 6428
253 클래스나눠서 xml 파싱과 FTP를이용하여 안드로이드에서 활용하기 2014.08.28 6242
252 전화 인텐트와 나의 전화 번호가져오기 2014.08.28 6372
251 사진찍기 및 앨범 에서 사진 가져오기!!! 2014.08.28 13950
250 안드로이드 웹에서 이미지 불러오기!! 2014.08.28 7376
249 맵에 오버레이 추가하여 아이템 넣어보기 2014.08.28 6541
248 실행중인 Service 확인하기 2014.08.28 6637
247 안드로이드 이미지 효율적으로 회전 해보기 2014.08.28 6071
246 WIFI 신호세기 강도 측정하기 2014.08.28 11309
245 WebView 줌 컨트롤러 가리기 2014.08.28 6359
244 ImageVeiw의 현재 리소스 비교하기 2014.08.28 6812
243 HTML5 Speech Input (음성인식) API 2014.09.04 6493
242 HTML5 시작하기 file 2014.09.04 5704
241 CSS3 Rounded Corner, 그림자 효과 사용하기 file 2014.09.04 6830
240 JavaScript 맛보기 file 2014.09.04 6639
239 HTML5로 비디오 보여주기 Video Tag file 2014.09.04 7112
238 HTML5로 나만의 비디오 플레이어 스킨 만들기 -1- CSS file 2014.09.04 6524
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved