메뉴 건너뛰기

조회 수 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 안드로이드 - 익명 클래스(Anonymous Class) 사용법 file 2021.03.31 281
236 안드로이드 - 문자열 리소스를 활용한 다국어 지원 file 2021.03.31 282
235 안드로이드 - SnackBar를 사용해 팝업창 띄우기 file 2021.03.31 282
234 안드로이드 - 옵션 메뉴 (Option Menu) 구현 방법 file 2021.04.01 283
233 초기화면 페이지를 만들어보자. splash 페이지 제작 file 2020.12.14 285
232 Java에서 XML 불러와서 동적 변화 주기 file 2021.03.31 288
231 줄바꿈 문자 치환 2020.12.14 289
230 [하이브리드앱] 링크를 웹뷰가 아닌 새로운 브라우저에서 열기 2021.09.30 293
229 패키지명을 한꺼번에 변경하기 (Refactor) file 2020.12.14 295
228 앱 번들(Android App Bundle) 만들기 file 2021.09.14 305
227 android.support.v4.content.FileProvider not found file 2020.12.14 308
226 안드로이드 - 리니어 레이아웃 (Linear Layout) file 2021.03.29 319
225 안드로이드 - 토스트(Toast) 메시지 사용하기. file 2021.03.31 321
224 안드로이드 - 뷰페이저(ViewPager) 구현 file 2021.04.02 323
223 안드로이드 앱배포하기 apk 만들기 file 2020.12.14 324
222 안드로이드 - 명시적 인텐트(Explicit Intent)와 암시적 인텐트 (Implicit Intent) file 2021.04.01 324
221 안드로이드 arrayList 를 Json으로 변환 / jsonarry file 2021.03.29 326
220 Firebase - 푸시알림 보내기 file 2021.09.30 339
219 Volley 이용시에 한글 깨질때 UTF-8로 변경 2020.12.14 343
218 안드로이드 - 버튼 이벤트 처리방법 정리 (리스너 구현 및 이벤트 핸들링) file 2021.03.31 343
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved