创建数据库时出现NullPointerException

时间:2013-12-13 18:53:19

标签: java sql nullpointerexception

我正在通过Java创建一个SQL数据库。问题是打开整个项目时总是出现错误。请帮忙。电脑写的是这样的:

Exception in thread "main" java.lang.NullPointerException
    at Oceny.Sql.<init>(Sql.java:16)

以下是包含此错误的类的代码。

   public class Sql {
   public static final String DRIVER="org.sqlite.JDBC";
   public static final String DB_URL ="jdbc:sqlite:sqlDB/szkola.db";       
   private Connection con;
   private Statement stat;
public Sql() {
    try{
        Class.forName(Sql.DRIVER);
         String sql = "CREATE DATABASE szkola";
         try {
            stat.executeUpdate(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("jebut");
            e.printStackTrace();
        }
    }catch(ClassNotFoundException e){
        System.err.println("Brak sterownika JDBC");
        e.printStackTrace();
    }

        try {
            con = DriverManager.getConnection(DB_URL);
            stat = (Statement) con.createStatement();
        } catch (SQLException e) {
            System.err.println("Problem z otwarciem polaczenia");
            e.printStackTrace();
    }

}

public void createtable(){

    try{
        String przedmiot="CREATE TABLE IF NOT EXISTS przedmiot (id INTEGER PRIMARY KEY AUTOINCREMENT, nazwa varchar(20), sprawdziany int(6), kartkowy int(6), pd int(6))"; //prace = połączenie z inną tabelą prac dodatkowych
        String prace="CREATE TABLE IF NOT EXISTS prace (id INTEGER PRIMARY KEY AUTOINCREMENT, przedmiot varchar(20), praca(250), czas date(100))";
        String plan="CREATE TABLE IF NOT EXISTS plan (id INTEGER PRIMARY KEY AUTOINCREMENT, day varchar(20))";
        String godzina="CREATE TABLE IF NOT EXISTS godzina(id INTEGER PRIMARY KEY AUTOINCREMENT, day varchar(20), godzina varchar(5), przedmiot varchar(20))";//chodiz o godzinę lekcyjną
        stat.execute(przedmiot);
        stat.execute(prace);
        stat.execute(plan);
        stat.execute(godzina);

    }catch(SQLException e){
        System.out.print("problem z tworzeniem tabel");
    }
}
}

3 个答案:

答案 0 :(得分:4)

变量

stat

在您的情况下为空

首先初始化它。

似乎你先使用它,然后初始化它。

答案 1 :(得分:0)

彼得已经解决了你明显的NPE问题。下次你应该能够通过查看堆栈跟踪轻松找到它。它告诉你它发生的线。该行的引用之一为null。这不难找到。

要纠正的错误很多:

  1. 如果发现异常,请不要将消息打印到System.out;打印或记录堆栈跟踪。它提供了更多信息。
  2. 在Java中创建数据库并不常见。您通常使用数据库管理工具创建数据库和模式,并仅使用Java与其进行交互。
  3. 您没有正确处理关闭Connection,Statement或ResultSet。它们应该在finally块中的方法范围内关闭。
  4. 外部化数据库连接信息。

答案 2 :(得分:0)

构造函数中的try/catch块的顺序错误。这应该是第一个,因此初始化stat

try {
  con = DriverManager.getConnection(DB_URL);
  stat = (Statement) con.createStatement();
} catch (SQLException e) {
  System.err.println("Problem z otwarciem polaczenia");
  e.printStackTrace();
}