соединение с оракул БД в Java возвращает исключение NullPointerException - PullRequest
0 голосов
/ 11 января 2012

У меня есть этот способ подключения к оракулу 11g xe.Это все еще возвращает исключение java.lang.NullPointerException.Я использую Eclipse IDE.Пожалуйста, помогите, я не знаю, как это исправить.

public static Connection connectDB() throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {

    Connection connection = null;
    try {
        // Load the JDBC driver
        String driverName = "oracle.jdbc.driver.OracleDriver";
        Class.forName(driverName).newInstance();

        // Create a connection to the database
        String serverName = "127.0.0.1";
        String portNumber = "1521";
        String sid = "xe";
        String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
        String username = "peter";
        String password = "pass";
        connection = DriverManager.getConnection(url, username, password);
        System.out.println(connection);
    } catch (ClassNotFoundException e) {
        // Could not find the database driver
    } catch (SQLException e) {
        // Could not connect to the database
    }
    System.out.println(connection);
    return connection;
}

Ответы [ 3 ]

2 голосов
/ 27 января 2012

Проблема была в драйвере для оракула. Я решаю это, поместив мне нужно положить ojdbc14.jar файл в папку на сервере. Я использую tomcat, поэтому я положил ojdbc14.jar файл в папку apache-tomcat-7.0.8\lib\

1 голос
/ 11 января 2012

Я думаю, что даже когда размещена трассировка стека, NullPointerException не встречается в фрагменте кода, размещенном в вопросе. Есть только две строки, которые не являются переменными инициализациями или простыми операторами System.out.println (которые в любом случае могут обрабатывать null).

Есть

Class.forName( driverName ).newInstance();

строка, которая может вызвать исключение, когда Class.forName( driverName ) не найден. Однако это может вызвать ClassNotFoundException, а не NullPointerException, поэтому это можно устранить.

Единственная другая строка, которая может вызвать исключение, это

connection = DriverManager.getConnection(url, username, password);

линия. Однако url, username и password не являются null, поэтому эта строка также не вызовет исключения.

Итог, получите трассировку стека, проанализируйте ее самостоятельно (тривиально при использовании IDE, просто нажмите на трассировку стека и посмотрите, куда вас ведет IDE) и, если необходимо, опубликуйте ее здесь с соответствующим фрагментом кода.

Да, и почему вы объявляете свой метод для выброса ClassNotFoundException, если вы его ловите и игнорируете в реализации метода. Это должно быть как худшее из обоих миров

1 голос
/ 11 января 2012

Вы игнорируете исключения, а затем надеетесь, что все прошло хорошо.Просто перестаньте игнорировать исключения, и у вас, вероятно, будет основная причина вашего NPE:

public static Connection connectDB() throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {

    Connection connection = null;
    // Load the JDBC driver
    String driverName = "oracle.jdbc.driver.OracleDriver";
    Class.forName(driverName).newInstance();

    // Create a connection to the database
    String serverName = "127.0.0.1";
    String portNumber = "1521";
    String sid = "xe";
    String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
    String username = "peter";
    String password = "pass";
    connection = DriverManager.getConnection(url, username, password);
    System.out.println(connection);

    System.out.println(connection);
    return connection;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...