본문 바로가기

쓸만한 주저리

[안드로이드 코틀린] oracle connection

반응형

ojdbc6-11.2.0.3.jar
2.59MB
ojdbc14.jar
1.12MB

첨부 파일(ojdbc6)을 project_folder\app\libs 안에 넣어 두면 됩니다. - 14는 setLoginTimeout이 작동하지 않음

build.gradle(app)에 아래 문구가 있으면 자동으로 참조합니다.

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

 

1. 주 Activity에서 Database로 연결하는 게 막혀 있어서 Thread를 열어서 접속하여야 한다.

2. Thread 안에서 Toast 접근이 안된다. Handler를 이용하여 가능하다.

3. 소리 재생(ToneGenerator)도 Thread 안에서는 작동하지 않는다. Handler를 이용하여 가능하다.

4. 오라클은 @ 기호를 사용한다. (마리아디비는 //)

5. 오라클은 tnsname 앞에 : 기호를 사용한다. (마리아디비는 /)

Thread(Runnable {
    var oracon: Connection? = null
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver")
        DriverManager.setLoginTimeout(1) //접속 제한 시간 설정 : 초 단위
        oracon = DriverManager.getConnection("jdbc:oracle:thin:@domain:port:orcl", "id", "password")
        try {
            val sql: String

            sql = "update table set column1=?,column2=? where pk=?"
            val prest = oracon!!.prepareStatement(sql)
            prest.setString(1,column1)
            prest.setString(2,column2)
            prest.setString(3,pk)
            val r=prest.executeQuery()
            prest.close()
            oracon.close()

            println("oralce ok : "+text)
            Toast.makeText(this, "oralce ok", Toast.LENGTH_LONG).show() //Thread 안에서 Toast 접근이 안되기 때문에 작동하지 않는다.
        }
        catch (s: SQLException) {
            println("Oracle statement is not executed! : "+s.message+"\n"+latitude+"\n"+longitude+"\n"+re)
            Handler(Looper.getMainLooper()).post { //Thread 안에서 Toast 접근하는 방법
                Toast.makeText(this, "Oracle statement is not executed! : "+s.message, Toast.LENGTH_LONG).show()
                val toneGen1 = ToneGenerator(AudioManager.STREAM_MUSIC, 100) //소리 재생도 Thread 안에서는 Handler를 통해서 해야 한다.
                toneGen1.startTone(ToneGenerator.TONE_CDMA_ABBR_ALERT, 300)
            }
        }
    }
    catch (e: Exception) {
        e.printStackTrace()
        println("Oracle Connection Error! : "+e.message)
        Handler(Looper.getMainLooper()).post {
            Toast.makeText(this, "Oracle Connection Error! : "+e.message, Toast.LENGTH_LONG).show()
            val toneGen1 = ToneGenerator(AudioManager.STREAM_MUSIC, 100)
            toneGen1.startTone(ToneGenerator.TONE_CDMA_ABBR_ALERT, 300)
        }
    }
}).start()

반응형