Я кодирую класс с драйвером JDBC PostgreSQL и использую класс ScriptRunner для использования внешнего файла сценария .sql. . Он работает, как и ожидалось, но в выводе есть раздражающее исключение java.lang.NullPointerException. Он появляется так же часто, как числовые строки в файле SQL.

import java.sql.*;
import java.io.BufferedReader;
import java.io.FileReader;

public class ConnectPostgreSQL {
  public static void main(String[] argv) {
  System.out.println("Checking if Driver is registered with DriverManager.");

  try {
    Class.forName("org.postgresql.Driver");
  } catch (ClassNotFoundException cnfe) {
    System.out.println("Couldn't find the driver!");
    System.out.println("Let's print a stack trace, and exit.");
    cnfe.printStackTrace();
    System.exit(1);
  }

  System.out.println("Registered the driver ok, so let's make a connection.");

  Connection c = null;

  try {
    c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "passroot");
  } catch (SQLException se) {
    System.out.println("Couldn't connect: print out a stack trace and exit.");
    se.printStackTrace();
    System.exit(1);
  }
  System.out.println("Hooray! We connected to the PostgreSQL database!");

  long begin = System.currentTimeMillis();
  System.out.println("==> Temps de départ : " + begin);

  ScriptRunner runner = new ScriptRunner(c, false, false);
  try {
    runner.runScript(new BufferedReader(new FileReader("C:/ScriptSQL/create.sql")));
  } catch(Exception e) {
    e.printStackTrace();
  }

  long end = System.currentTimeMillis();
  System.out.println("==> Temps d'arrivée : " + end);

  float time = ((float) (end-begin)) / 1000f;
  System.out.println("Temps d'exécution : " + time + " sec");
  }
}

Вывод:

Checking if Driver is registered with DriverManager.
Registered the driver ok, so let's make a connection.
Hooray! We connected to the PostgreSQL database!
==> Temps de départ : 1300311132808
java.lang.NullPointerException
    at ScriptRunner.runScript(ScriptRunner.java:209)
    at ScriptRunner.runScript(ScriptRunner.java:110)
    at ConnectPostgreSQL.main(ConnectPostgreSQL.java:36)
java.lang.NullPointerException
    at ScriptRunner.runScript(ScriptRunner.java:209)
    at ScriptRunner.runScript(ScriptRunner.java:110)
    at ConnectPostgreSQL.main(ConnectPostgreSQL.java:36)
java.lang.NullPointerException
    at ScriptRunner.runScript(ScriptRunner.java:209)
    at ScriptRunner.runScript(ScriptRunner.java:110)
    at ConnectPostgreSQL.main(ConnectPostgreSQL.java:36)
java.lang.NullPointerException
    at ScriptRunner.runScript(ScriptRunner.java:209)
    at ScriptRunner.runScript(ScriptRunner.java:110)
    at ConnectPostgreSQL.main(ConnectPostgreSQL.java:36)
CREATE TABLE TEST123(a INTEGER, b VARCHAR(50), c VARCHAR(50)) 
INSERT INTO TEST123 VALUES(1, 'Riri', 'Tic') 
INSERT INTO TEST123 VALUES(2, 'Fifi', 'Tac') 
INSERT INTO TEST123 VALUES(3, 'Loulou', 'Toc') 
==> Temps d'arrivée : 1300311132938
Temps d'exécution : 0.13 sec

Я не нахожу, как избавиться от этих строк. :'(
Может кто-нибудь помочь мне, пожалуйста?

2
pihug12 17 Мар 2011 в 00:39
Убедитесь, что файл доступен
 – 
Bozho
17 Мар 2011 в 00:42

1 ответ

Я считаю, что это может быть ошибка в ScriptRunner. В строке 209 предполагается, что rs не является нулевым (хотя предварительно проверяется, действительно ли rs является нулевым). Мое изменение будет:

try {
   if (rs!=null) 
     rs.close();
} catch (Exception e) {
   e.printStackTrace();
}
try {
   if (statement!=null) 
      statement.close();
} catch (Exception e) {
   e.printStackTrace();
}

Я предполагаю, что проблема возникает для таких операторов, как CREATE TABLE или INSERT, а не для SELECT. Я прав?

0
Grzegorz Oledzki 17 Мар 2011 в 01:04
Да, ты прав ! Оператор SELECT ничего не выводит. Я не знаю, нормально это или нет, я хотел бы видеть содержимое таблицы. :-/ Значит, вы думаете, что лучший способ решить проблему — применить это изменение?
 – 
pihug12
17 Мар 2011 в 02:21
Я попробовал ваше изменение. Это решает проблему, большое спасибо! Знаете ли вы, нормально ли это, если я не вижу результат оператора SELECT?
 – 
pihug12
17 Мар 2011 в 02:29