Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> После доступа к базе выпадает javaNullPointerExcep, Mysql 
V
    Опции темы
Dzo
Дата 10.6.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 22.4.2008

Репутация: нет
Всего: 1



Код



import java.sql.*;

public class Database {

    public Connection connection;

    // for a while user and pass here
    public static final String USER = "1234";
    public static final String PWD = "1234";
    
    public Connection dbConnect(String user, String pwd) {
        
        // create connection
        
        try {
            
            Class.forName("com.mysql.jdbc.Driver"); // register jdbc
            // create connection
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/blabla?" + "user="+user+"&password="+pwd);
        
        } catch (SQLException e) {
            
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
            
        } catch (ClassNotFoundException ex) {
            
            System.out.println("JDBC registration error: " + ex.getMessage());
        } 
        
        return connection;
        
    }
    
    public void dbClose() {
        try {
            connection.close();
        } catch (SQLException e) {
            
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
        }
    }
    
    public static void main (String args[]) {
        Database db = new Database();
        Connection connection = db.dbConnect("1234", "1234");
        
        String todo = ("INSERT INTO menuelements VALUES(1,test,test,test,1,1,1)");
        try {
        Statement s = connection.createStatement();
        s.executeUpdate(todo);
        } catch (SQLException e) {
            
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
        }
        
    }
}



Ошибка такая:

Exception in thread "main" java.lang.NullPointerException
    at ee.ebsa.core.Database.main(Database.java:56)


56 строка:
Statement s = connection.createStatement();

Я искал в нете решение, но глухо.

HELP!
PM MAIL   Вверх
Shurr
Дата 10.6.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 1
Всего: 7



Dzo
В методе dbConnect новый коннекшн присваивается локальной переменной connection, а возвращается поле объекта Database, которое тоже называется connection.
PM MAIL   Вверх
AntonSaburov
Дата 10.6.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Ты внутри try ... catch создал ЛОКАЛЬНУЮ переменную connection, а возвращаешь член класса, который пока не инциализирован, т.е. = null.
PM MAIL WWW ICQ   Вверх
ivg
Дата 10.6.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Код

19:              connection = DriverManager.getConnection("jdbc:mysql://localhost/blabla?" + "user="+user+"&password="+pwd);


Добавлено через 37 секунд
 smile 
PM MAIL   Вверх
Dzo
Дата 10.6.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 22.4.2008

Репутация: нет
Всего: 1



ДУРАК!  smile 

Спасибо!
PM MAIL   Вверх
AntonSaburov
Дата 10.6.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Да уж - три человека почти одновременно отвечают. Показательно - народа на форуме немало. Что не может не радовать smile
PM MAIL WWW ICQ   Вверх
Dzo
Дата 10.6.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 22.4.2008

Репутация: нет
Всего: 1



: ( Я чего-то вообще туплю.

Суть такая:

Я захотел вынести всю хрень для соеденения с базой в отдельный класс.

Код

import java.sql.*;

public class Database {

    public Connection connection;

    // for a while user and pass here
    public static final String USER = "1234";
    public static final String PWD = "1234";
    
    public Connection dbConnect(String user, String pwd) {
        
        try {
            
            Class.forName("com.mysql.jdbc.Driver"); // register jdbc
            // create connection
            connection = DriverManager.getConnection("jdbc:mysql://localhost/blabla?" + "user="+user+"&password="+pwd);
        
        } catch (SQLException e) {
            
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
            
        } catch (ClassNotFoundException ex) {
            
            System.out.println("JDBC registration error: " + ex.getMessage());
        } 
        
        return connection;
    }
    
    public void dbClose() {
        try {
            connection.close();
        } catch (SQLException e) {
            
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
        }
    }
}


Теперь у меня есть сервлет, задача которого, дико простая - добавлять инфу в базу.

Код


import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ee.ebsa.core.Database;

import java.sql.*;

public class MenuElements extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   
    public MenuElements() {
        super();
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        String elmName = request.getParameter("elmName");
        String titleEst = request.getParameter("titleEst");
        String titleEng = request.getParameter("titleEng");
        String pageID = request.getParameter("pageID");
        String parentID = request.getParameter("parentID");
        String position = request.getParameter("position");
        
        // adding info to database
        try {
            Database db = new Database();
            Connection dbConnection = db.dbConnect(db.USER,db.PWD);
            
            String sqlTemp = "INSERT INTO menuelements VALUES(1,?,?,?,?,?,?)";
            PreparedStatement sqlQuery = dbConnection.prepareStatement(sqlTemp);
             
            sqlQuery.setString(2,elmName);
            sqlQuery.setString(3,titleEst);
            sqlQuery.setString(4,titleEng);
            sqlQuery.setString(5,pageID);
            sqlQuery.setString(6,parentID);
            sqlQuery.setString(7,position);
            
            int r = sqlQuery.executeUpdate();
            sqlQuery.close();
            dbConnection.close();
        
        } catch (SQLException e) {
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
        }
        
    }
}



Когда я его запускаю, мне опять валицца ошибка nullPointerException : ((

java.lang.NullPointerException
    MenuElements.doPost(MenuElements.java:36)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

Это то что томкат говорит, а в консоле еще мелькает JDBC registration error: com.mysql.jdbc.Driver

Правильно ли я понимаю, что из-за того, что вылазит ошибка с регистрацией коннектора, получается значение нулл для моего коннекта к базе в сервлете. Просто, если отдельно тестировать класс Database все работает!
PM MAIL   Вверх
Dzo
Дата 10.6.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 22.4.2008

Репутация: нет
Всего: 1



 smile 
PM MAIL   Вверх
Dzo
Дата 10.6.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 22.4.2008

Репутация: нет
Всего: 1



Проблема решена.

Забыл добавить в папочку lib коннектор джар : )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.