메뉴 건너뛰기

조회 수 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();
?>

  1. 스토리보드 짜는 방법

  2. 탭 뷰에 탭 추가하기, 아이콘 넣기

  3. 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (3)

  4. 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (2)

  5. 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (1)

  6. No Image 16Jul
    by
    2015/07/16 Views 9935 

    네트워크 상태 변화 감지하기(BroadcastReceiver 사용)

  7. No Image 16Jul
    by
    2015/07/16 Views 6926 

    옵션 메뉴 동적으로 생성하기

  8. No Image 16Jul
    by
    2015/07/16 Views 13881 

    EditText의 글자 수 제한 걸기

  9. No Image 16Jul
    by
    2015/07/16 Views 6337 

    사용자 정의 팝업창 띄우기

  10. No Image 16Jul
    by
    2015/07/16 Views 6398 

    체크 박스(CheckBox)의 이미지 바꾸기

  11. No Image 16Jul
    by
    2015/07/16 Views 7114 

    이미지 버튼(ImageButton) 만들기

  12. No Image 16Jul
    by
    2015/07/16 Views 7658 

    이미지의 Orientation를 체크해서 이미지 회전하기

  13. No Image 16Jul
    by
    2015/07/16 Views 8055 

    화면 회전에 따른 애니메이션 효과 구현하기

  14. 화면 해상도에 관계없는 레이아웃(Layout) 만들기

  15. No Image 16Jul
    by
    2015/07/16 Views 6146 

    네트워크를 통해 받은 이미지를 파일로 저장하고, 크기 조절해서 불러오기

  16. No Image 16Jul
    by
    2015/07/16 Views 6767 

    특정 폴더에서 오래된 파일 삭제하기

  17. No Image 16Jul
    by
    2015/07/16 Views 6530 

    ScrollView의 활용

  18. ViewFlipper 사용하기

  19. URL을 이용해서 이미지 다운로드 하기 (멀티 쓰레드 이용)

  20. No Image 16Jul
    by
    2015/07/16 Views 7400 

    URL을 이용해서 이미지 다운로드 하기

Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved