2013-12-13 86 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(); 
} 
相關問題