Исключение Null Pointer создает исключение в getConnection () - PullRequest
2 голосов
/ 22 ноября 2010

У меня следующая ситуация: у меня есть Java-код, который связан с базой данных (MySQL).Когда я запускаю код Java из затмения и беру данные из базы данных, все в порядке.Но когда я запускаю Java-код из HTML-кода как апплет, он выдает исключение нулевого указателя, и я обнаруживаю, что проблема в этом случае возникает в следующем Java-коде:

private  Connection getConnection() throws SQLException{
   try {
        Class.forName("com.mysql.jdbc.Driver");
        String name="jdbc:mysql://localhost:3306/sensors_data";
        String username="root";
        String psw="11111";

        conn = DriverManager.getConnection(name,username,psw);
   } catch(Exception e) {
        e.printStackTrace();
   }
   return conn;

}

объект "conn" является нулевым.

Ответы [ 3 ]

5 голосов
/ 22 ноября 2010

Хорошо, если DriverManager.getConnection() выдает исключение, вы распечатываете исключение, но затем все равно возвращаете conn.Возможно, вам следует разрешить распространению исключения на вызывающего абонента - в конце концов, у вызывающего абонента теперь нет соединения, которое они могут использовать.из SQLException, что является плохой идеей.)

Я не ожидал бы, что смогу напрямую подключаться к базе данных из апплета - я не могу вспомнить точные ограничения на сетевые подключения апплета, но это вполне может быть проблемой.Где работает база данных по сравнению с веб-сервером?Если он не находится на том же хосте, с которого публикуется апплет, я не ожидаю, что он вообще сможет установить соединение без специальных разрешений.(Попытка подключиться к localhost особенно маловероятна, я подозреваю.)

Вы должны увидеть исключение, выданное DriverManager.getConnection в вашем журнале отладки, конечно - это должен быть первый портвызова, а также исправление обработки исключений.

1 голос
/ 22 ноября 2010

Замените localhost именем машины, на которой находится база данных, затем повторите попытку.

0 голосов
/ 17 ноября 2012

Проблема в том, что вы должны вернуть conn внутри потока try {}. Или вы можете создать переменную соединения в качестве поля класса, а затем назначить значение conn соединению внутри шага try {}, и тогда проблема будет решена с надеждой.

    public static Connection conn1 = null;

public static Connection getConnection(){
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection conn = DriverManager.getConnection 
                ("jdbc:mysql://localhost/?user=root&password=root");
        if(conn != null){
            System.out.println("Connect database successfully.");
            conn1 = conn;
        }
        else System.out.println("Connection failed...");
        return conn;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...