2016-05-29 140 views
-2

異常線程「main」 kotlin.KotlinNullPointerException在Kotlin.main(DB.kt:4)科特林數據庫連接錯誤

誰能給我解釋一下這是什麼問題,我應該做些什麼來處理這個異常?

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。* object Kotlin @JvmStatic fun main(args:Array ){ val conn:Connection = null! VAL URL = 「JDBC:MySQL的://本地主機:3306 /」 VAL DBNAME = 「DB-01」 VAL驅動= 「com.mysql.jdbc.Driver」 嘗試 { 的Class.forName(驅動程序)。的newInstance() 康恩=的DriverManager.getConnection( 「JDBC:MySQL的://本地主機/學生」) 的println( 「連接到數據庫」) conn.close() 的println( 「從數據庫斷開連接」) } catch(e:Exception){ e.printStackTrace() } } } – Vineet

回答

2

val conn: Connection = 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() 
}