빡빡종
545
2020-08-03 17:25:30
4
153

cafe 24의 Tomcat JSP호스팅 절약형 마리아DB 안드로이드와 연동


cafe 24 Tomcat JSP호스팅 절약형에서 마리아DB를 사용하고 있는데

안드로이드와 웹에 있는 마리아 DB랑 연결할수 있나요?


할수 있다면 어떤 방법들이 있을까요?
0
  • 답변 4

  • NULL만나면
    2k
    2020-08-03 17:40:40

    안드로이드는 자바이고 웹도 자바인가요?

    자바에서 디비 연결하는 방법을 쓰면 됩니다.

    JDBC, DBCP&JNDI, MyBatis, JPA 등.

  • 빡빡종
    545
    2020-08-03 18:10:04
    연결하는 코드는 구글링해서 찾았는데 연결 실패하네요.ㅠㅠ
  • 바람종
    1k
    2020-08-03 18:16:02

    안드로이드에서는 디비에 직접 연결 할 수 없습니다.

    (보안상의 이유가 큽니다.)

    일반 적으로는

    안드로이드 <-> 웹 API <-> DB 이런 구조로 사용합니다. 

    (안드로이드에서는 http 클라이언트 코드를 찾아봐야겠죠? okhttp 같은 라이브러리를 많이 사용합니다.)

  • CyanGlint
    718
    2020-08-04 11:46:54
    //모듈 레벨 Gradle
    android {
        compileOptions {
            targetCompatibility = 1.8
            sourceCompatibility = 1.8
        }
    }
    
    dependencies {
        implementation 'org.mariadb.jdbc:mariadb-java-client:2.4.1'
    }


    class MConnectionManager {
        companion object {
            fun <T> executeSql(
                url: String,
                user: String,
                pw: String,
                query: String,
                factory: (rs: ResultSet) -> T,
                callback: (items: MutableList<T>?, msg: String) -> Unit
            ) =
                CoroutineScope(Dispatchers.Default).launch {
                    try {
                        Class.forName("org.mariadb.jdbc.Driver")
                        DriverManager.setLoginTimeout(1)
                        val conn = DriverManager.getConnection(url, user, pw)
                        val state = conn.createStatement()
    
                        val rs = state.executeQuery(query)
    
                        val result = mutableListOf<T>()
                        while (rs.next()) {
                            result.add(factory.invoke(rs))
                        }
                        withContext(Dispatchers.Main) {
                            callback.invoke(result, "")
                        }
                    } catch (e: Exception) {
                        withContext(Dispatchers.Main) {
                            callback.invoke(null, e.message ?: "알수 없는 오류입니다.")
                        }
                    }
                }
        }
    }


    //MainActivity.kt
    btn_show.setOnClickListener {
        MConnectionManager.executeSql(
            "url",
            "user",
            "pw",
            "query",
            { rs ->
                CustomerInfo(
                    rs.getInt("code"),
                    rs.getString("name")
                )
            }
        ) { items, msg ->
            if (items == null) {
                AlertDialog.Builder(this)
                    .setMessage(msg)
                    .show()
            } else {
                adapter.items = items
            }
        }
    }


    예전에 적어놨던 코드 조각입니다.

    직접 동작하는 것 까지 봤으니까 일단 가능은 한걸로...


    하지만 윗분 말씀대로 안드로이드에서 DB로 직접 붙는건 비 권장 사항입니다.

  • 로그인을 하시면 답변 을 등록할 수 있습니다.