2013-12-13 52 views
0

我正在通过Java创建SQL数据库。问题是打开整个项目时总是显示错误。请help.Computer写这样的事情:创建数据库时发生NullPointerException

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"); 
    } 
} 
} 

回答

4

变量

stat 

你的情况

首先初始化它空。

似乎你第一次使用它,然后初始化它。

0

彼得已经整理出你明显的NPE问题。下一次你应该能够通过查看堆栈跟踪来轻松搞定它。它会告诉你它发生的路线。该行的参考之一为空。这不难找到。

很多错误的纠正:

  1. 如果赶上一个异常不打印邮件到System.out;打印或记录堆栈跟踪。它提供了更多的信息。
  2. 在Java中创建数据库并不常见。您通常使用数据库管理工具创建数据库和模式,并仅使用Java与其交互。
  3. 您不处理正确关闭Connection,Statement或ResultSet。它们应该在finally块的方法范围内关闭。
  4. 外部化数据库连接信息。
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(); 
} 
相关问题