2011-07-10 10 views
0

私はエラーになってるダービー組み込みモードでのテーブル作成するときに:私は次のメソッドを使用して、テーブル作成NullPointerExceptionが

private static final String driver = "org.apache.derby.jdbc.EmbeddedDriver"; 
private static final String protocol = "jdbc:derby:"; 
private static final Properties props = new Properties(); 


public static Connection getDatabaseConnection() { 
    try { 
     if(conn==null || conn.isClosed()) { 
      try { 
       Class.forName(driver).newInstance(); 
       conn = DriverManager.getConnection(protocol+"minos;create:true;",props); 
      } catch (InstantiationException e) { 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return conn; 
} 

:私はこの方法を使用して接続を作成する

Exception in thread "main" java.lang.NullPointerException 
at com.deanchester.minos.utils.DatabaseManager.createTables(DatabaseManager.java:59) 
at com.deanchester.minos.tests.testAddContestantMethod.main(testAddContestantMethod.java:21) 

private static final String tablesSQL = "CREATE TABLE `contestants` (`id` int(11) NOT NULL AUTO_INCREMENT,`first_name` varchar(100) DEFAULT NULL,`last_name` varchar(100) DEFAULT NULL, `entry` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `finalTimes` (`id` int(11) NOT NULL AUTO_INCREMENT,`contestant` int(11) DEFAULT NULL,`time` int(11) DEFAULT NULL,PRIMARY KEY (`id`), KEY `contestant` (`contestant`), CONSTRAINT `finaltimes_ibfk_1` FOREIGN KEY (`contestant`) REFERENCES `contestants` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `heatTimes` (`id` int(11) NOT NULL AUTO_INCREMENT,`contestant` int(11) DEFAULT NULL,`time` int(11) DEFAULT NULL,PRIMARY KEY (`id`),CONSTRAINT `heattimes_ibfk_1` FOREIGN KEY (`id`) REFERENCES `contestants` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;";  
public static void createTables(){ 
    try { 
     PreparedStatement ps = conn.prepareStatement(tablesSQL); 
     ps.executeUpdate(); 
     System.out.println("Tables Created"); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

なぜこのエラーが発生しますか?私のテーブルを作成するSQLは、MYSQLデータベースのダンプから直接来ました。ソフトウェアはスタンドアロンのマシン上で動作するため、私はMYSQLから移行しました。これ以外にインストールする必要がなかったので、これはapache derbyが良い選択です。ここで

編集
は私の小さなテストクラスです:

public class testAddContestantMethod { 
public static void main(String[] args){ 
    Contestant cont = new Contestant("Dean","Chester","Mazey"); 

    DatabaseManager.createTables(); 
    cont.writeContestantToDatabase(); 
    DatabaseManager.shutdownDatabase(); 
    } 
} 

答えて

3

例外がgetDatabaseConnectionにありますならば、あなたは、単にそれをプリントアウトしている - それはときに例外があったことは完全に可能だ意味していますconnnullとし、NullPointerExceptioncreateTablesにして接続を作成しようとしました。

さらに、実際にgetDatabaseConnectionと呼ぶものは表示されていません。

getDatabaseConnectionに例外が伝播された場合は、それをcreateTablesから呼び出すことをお勧めします。

(一般的には、単に例外をプリントアウトし、それがを実現しなかったふりをすることは、適切なエラー処理戦略ではありません。)

+0

私が間違っvaribleを使用していたので、それは 'NullPointerException'ました接続のために。そして、私が 'conn.prepareStatement(" ");'を呼んでいたときに、割り当てられていない/初期化されていなかった – Dean