2016-05-29 86 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() 
}