尝试使用Java在sqlite数据库中创建表时出现空指针异常

尝试使用Java在sqlite数据库中创建表时出现空指针异常,java,sql,database,sqlite,Java,Sql,Database,Sqlite,我有一个简单的Java程序,可以连接到一个空的sqlite数据库。我正在尝试创建一个表,但在尝试执行查询时得到一个空指针异常 我确保所有需要的罐子都在那里 我使用调试器查找有问题的代码行。下面是我代码的第51行。另一行相关代码是Statement类的第113行,如有必要,我可以将其发布以供参考 我确保我的声明是正确草签的 堆栈跟踪: java.lang.NullPointerException at org.sqlite.Stmt.execute(Stmt.java:113)

我有一个简单的Java程序,可以连接到一个空的sqlite数据库。我正在尝试创建一个表,但在尝试执行查询时得到一个空指针异常

  • 我确保所有需要的罐子都在那里
  • 我使用调试器查找有问题的代码行。下面是我代码的第51行。另一行相关代码是Statement类的第113行,如有必要,我可以将其发布以供参考
  • 我确保我的声明是正确草签的
堆栈跟踪:

java.lang.NullPointerException
    at org.sqlite.Stmt.execute(Stmt.java:113)
    at SqliteConnection.main(SqliteConnection.java:52)

您的
connect
方法创建一个连接对象,然后。。。立即关闭自己。这不是您使用try/finally的方式。(最后的意思是:在执行尝试退出关联的try块时执行此操作。这并不意味着:如果从此以后整个代码库中的任何地方发生异常,请执行此块)

提示:异常包含5个有用的东西:类型、消息、堆栈跟踪和因果链。印刷所有难以做到的事情;所以不要尝试。如果您不知道如何处理异常,可以将其向前抛出(只需将
抛出异常
放在您的主方法上),或者如果您不能/不希望这样做,则抛出新的RuntimeException(e)e.printStackTrace()相比,code>是一种优越得多的方法

更好的实施示例:

import java.sql.*;
公共类SqliteConnection{
公共静态连接connect()引发SQLException
{
连接conn=DriverManager.getConnection(url);
System.out.println(“已建立到SQLite的连接”);
返回连接;
}
公共静态void main(字符串[]args)引发SQLException
{
尝试(连接c=connect();语句stmt=c.createStatement();){
String sql=“创建表Car(CarID INT不为NULL,制造商文本,类型文本,FuelEfficiency REAL,主键(CarID));”;
stmt.execute(sql);
}
}
}
请注意上面的示例:

  • 使用“ARM”(自动资源管理)构造创建连接和语句对象,确保无论块如何退出,它们在块退出时始终处于关闭状态

  • 代码更短,更容易阅读

  • 确实发生的SQLExceptions将立即打印所有相关信息,而不仅仅是零碎信息。此外,如果发生异常,导致异常的代码路径将中止,而不是在无效状态下继续

  • java.lang.NullPointerException
        at org.sqlite.Stmt.execute(Stmt.java:113)
        at SqliteConnection.main(SqliteConnection.java:52)