Я кодирую класс с драйвером 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
Я не нахожу, как избавиться от этих строк. :'(
Может кто-нибудь помочь мне, пожалуйста?
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
. Я прав?
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.