2016-05-29 17 views
-2
Kotlin.mainでkotlin.KotlinNullPointerException(DB.kt:4)スレッド内

例外「メイン」Kotlinデータベース接続エラー

誰もが、これは何を私に説明することができ、私はこの例外を処理するために何をすべきでしょうか?

object Kotlin { 
    @JvmStatic fun main(args: Array<String>) { 
     val conn: Connection = null!! 
     val url = "jdbc:mysql://localhost:3306/" 
     val dbName = "db-01" 
     val driver = "com.mysql.jdbc.Driver" 
     try { 
      Class.forName(driver).newInstance() 
      conn = DriverManager.getConnection("jdbc:mysql://localhost/student") 
      println("Connected to the database") 
      conn.close() 
      println("Disconnected from database") 
     } catch (e: Exception) { 
      e.printStackTrace() 
     } 
    } 
} 
+0

コードなしではありません。 – nhaarman

+0

import java.sql。* オブジェクトKotlin { @JvmStatic fun main(args:Array ){ val conn:Connection = null !! ヴァルのURL = "JDBC:MySQLの:// localhostを:3306 /" ヴァルDBNAME = "DB-01" ヴァルドライバ= "はcom.mysql.jdbc.Driver" {Class.forNameの(ドライバ)を試みます。 newInstance() CONN =たDriverManager.getConnection( "JDBC:MySQLの:// localhostの/学生") のprintln( "データベースに接続された") はconn.close() のprintln( "データベースから切断") } catch(e:Exception){ e.printStackTrace() } } } – Vineet

答えて

2

val conn: Connection = null!!

値がnullない場合!!は、非ヌル型にnull許容型を 'キャスト'。 nullの場合、NullPointerExceptionがスローされます。

したがって、null!!を実行すると、結果はNullPointerExceptionになります。
代わりにlateinit varを使用するか、Connectionをヌルにします。

+0

クラスの正確なコードを教えてください。 – Vineet

1

あなたが後でそれを初期化するつもりなら、ローカルvalを初期化しないように完全に罰金です:

fun main(args: Array<String>) { 
    val conn: Connection 
    // ... some code ... 
    conn = DriverManager.getConnection("jdbc:mysql://localhost/student") 
} 

をそして、あなたはtryブロックの外部接続を必要としない場合、あなたはそれを宣言して初期化することができますそれは同じ行で:

try { 
    //... 
    val conn = DriverManager.getConnection("jdbc:mysql://localhost/student") 
    //... 
    conn.close() 
} catch (e: Exception) { 
    e.printStackTrace() 
} 
関連する問題