본문 바로가기
Android

안드로이드 retrofit2(레트로핏2)를 이용한 통신예제 (2)

by 일용직 코딩노동자 2020. 12. 8.
728x90
반응형

저번 글에 이어서 이번 게시글에서는

 

이클립스 코드쪽을 살펴보겠습니다.

 

우선 이클립스에서 jsp파일을 만들어주겠습니다.

 

저는 idfind.jsp 라는 파일을 생성했습니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="패키지명.*" %>
<%@ page import="org.json.simple.JSONArray, org.json.simple.JSONObject" %>
<%
	Login login = new Login();
	String result = "";

	String user_nm = request.getParameter("user_nm");
    	String prot_hp_no   = request.getParameter("prot_hp_no");
	result = login.idFind(user_nm, prot_hp_no);
%>
<%=result %>

 

이 jsp파일이 데이터베이스와 안드로이드 사이에서 통신역할을 해주는 중간 다리 역할이라고 생각하시면 됩니다.

 

이 파일의 경로가 안드로이드 스튜디오에서 작성 하셨던 인터페이스에 들어가는 경로입니다.

 

보시면 안드로이드에서 함수를 작성하여 HashMap에 담아서 날렸던 키값들을 받고있습니다.

 

그다음에는 데이터베이스에 연결을 해야합니다.

 

저같은 경우는 mssql를 이용하여 했습니다.

 

그 전에 라이브러리 2가지만 추가해주고 시작하실게요.

 

 

json,mssql.zip
1.03MB

해당 압축파일 안에 이클립스에서 제이슨과 mssql 연동에 필요한 라이브러리가 있습니다.

 

추가해주셔야합니다.

 

저는 Mac에서 코딩하여 UI가 조금 다를순 있지만 거의 똑같습니다.

 

프로젝트 오른쪽 클릭하시면 Build Path라고 있는데 거기에서 Configure Build Path를 클릭해주시면 됩니다.

 

이러한 화면에서 빨간 동그라미를 클릭하여 다운받으신 2개의 파일을 넣어주시고 Apply 해주시면 됩니다.

 

이제 다시 본론으로 넘어가서.....

 

클래스를 하나 만들어줄게요.

 

저는 DBconn이라는 클래스를 생성했습니다.

 

import java.sql.Connection;
import java.sql.DriverManager;

public class DBconn {
	
	/**
     * MSSQL
     */
     Connection conn=null;
     String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
     String url= "jdbc:sqlserver://192.168.0.101:1433"; //1433은 데이터베이스의 포트번호
     Boolean connect = false;
   
     public Connection getConnection(){
        try{
            Class.forName(driver);
            conn = DriverManager.getConnection(url,"디비명","디비비밀번호");
			System.out.println("연결 성공");
        }
        catch(Exception e){
            e.printStackTrace();
            System.out.println("연결 실패");
        }
        return conn;
    }
}

이렇게 작성해주었습니다.

 

이부분에서 데이터베이스를 커넥션(연결) 합니다.

 

자 이제 해당 클래스까지 만드셨다면 데이터베이스에 대한 기본적인 셋팅은 끝났습니다. (거의 다 왔어요)

 

위에 jsp파일에 보시면 Login 클래스 객체를 받았는데요.

 

Login이라는 클래스를 생성해주시고 그 안에 함수를 하나 작성하겠습니다.

 

public String idFind(String user_nm, String hp_no) throws IOException, ServletException{
        
        String result = "";
        
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        DBconn dbms = new DBconn();
        Connection conn = dbms.getConnection();
        
        String SQL = "";
        
        try{
            
            JSONArray jArray = new JSONArray();
            
            SQL  = "Select user_id                             \n";   
            SQL += "  From 테이블명                              \n";
	    SQL += " Where user_nm =      '" + user_nm + "'    \n";
	    SQL += "   and user_hp_no   = '" + hp_no + "'      \n";
            System.out.println(SQL);
            
            pstmt = conn.prepareStatement(SQL);
            rs = pstmt.executeQuery();

            int count = 0;
            while(rs.next()){

                JSONObject jObject = new JSONObject();
                jObject.put("user_id", rs.getString("user_id"));
                jArray.add(count, jObject);
                
                count++;
            }
            
            JSONObject jsonMain = new JSONObject();
            if(count > 0){
                jsonMain.put("result", "00");
            }
            else{
                jsonMain.put("result", "01");
            }
            
            jsonMain.put("List", jArray);
            
            result = jsonMain.toJSONString();
            
        }
        catch(SQLException e) {
            e.printStackTrace();
        }
        finally{
           try {
              if(rs != null) rs.close();
              if(pstmt != null) pstmt.close ();
              if(conn != null && !conn.isClosed()) {
                 if(!conn.getAutoCommit())
                 conn.setAutoCommit(true);
                 conn.close();
              }
           } 
           catch(SQLException e) {
               e.printStackTrace();
           }
        }
        return result;

    }

보시면 위에서는 아까 셋팅한 데이터베이스 연결 클래스를 객체로 받구요.

 

String형 변수에다가 쿼리문을 담아서 실행했습니다.

 

그리고 while문 안을 봐주세요.

 

데이터베이스에 있는 컬럼명을 키값으로 하여 추출 하였습니다.

 

제가 하고있던 과정은 아이디찾기 기능이여서 user_id라는 컬럼명으로 추출했습니다.

 

이부분은 여러분들의 디비설계에 따라 달라지겠지요?

 

이렇게 result변수에 select해서 가져온 정보를 제이슨으로 만든뒤 형식만 String형식으로 변환하여

 

담아준 뒤 리턴 시켰습니다.

 

자 이 리턴값은 어디로 가느냐?

 

아까 jsp로 갑니다.

 

result = login.idFind .... 이부분이 되겠지요.!!

 

자 그럼 안드로이드로 돌아올게요.

 

전 게시글에을 참고해보시면

 

onedaycodeing.tistory.com/118

 

안드로이드 함수에서 제이슨 파싱하는 과정과 이클립스에서 제이슨을 만들어준 과정의 키값을 보시면 일치하실겁니다.

 

결과값에 따라서 통신을 진행하시면 되는데요.

 

여기서 중요한건 만약 https가 아닌 http로 시작하는 주소라면

 

onedaycodeing.tistory.com/14 

 

WebView에서 http로 시작하는 주소로 인해 어플에서 실행이 안될시

어플리케이션 안에 android:usesCleartextTraffic="true" 내용 한줄을 추가해주면 간단. 안드로이드 WebView가 https밖에 인식을 못하여 메니페스트에 코드 한줄을 추가하여 해결. 궁금하신 사항은 댓글 남

onedaycodeing.tistory.com

이부분도 참고해서 넣어주시면 될것같습니다.

 

오늘도 같이 삽질 시작입니다.

 

728x90
반응형

댓글