Servlet+polaczenie z mysql - problem

0

Witam. Jestem nowy w servletach ale z jdbc juz troche sie bawilem. W kazdym razie problem jest nastepujacy:

Mam Klase DBConnector ktora obsluguje polaczenie z baza mysql na singletonie (dziala), klase BazaS ktora wyciaga dane z bazy (sprawdzalem metody w mainie, chodza) natomiast jak wywoluje metody klasy BazaS do servletu to wywala mi nulle (choc w servlecie stworzylem maina i tez chodzi ok). Cos z widocznoscia static?

fragment servletu:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SimpleServlet extends HttpServlet {
	public static void main(String[] args){
		BazaS baza=new BazaS();
		System.out.println(baza.zwrocHaslo());
	}
	
	
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {
	//Connection polaczenie=DBConnector.getPolaczenie();
	BazaS baza=new BazaS();
         String t=baza.zwrocHaslo();
	PrintWriter out;
	response.setContentType("text/html");
	out = response.getWriter();	
	
	out.println("<HTML><BODY>");
	out.println(t);
         out.println("</BODY></HTML>");
	out.close();
	
ServletContext ctx = this.getServletContext();

}

Servlet wywala sie na lini: String t=baza.zwrocHaslo(); (nulle). Co poradzic?

0

bez kodu klasy Baza raczej nikt Ci nie będzie mógł pomóc..

0

klasa BazaS

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class BazaS{
	public static Connection polaczenie=DBConnector.getPolaczenie();

	public String zwrocLogin(){
		try {
			Statement stm=null;
			stm = polaczenie.createStatement();
			ResultSet set=stm.executeQuery("SELECT login FROM ble");
			String login="";
			while(set.next()){
		        login=set.getString(1);
		        
		       
		}
			return login;
			//System.out.println("tu jestem");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//System.out.println("login zle");
		return "";
	}
	public String zwrocHaslo(){
		try {Statement stm = polaczenie.createStatement();
			String haslo="";
			ResultSet set=stm.executeQuery("SELECT haslo FROM ble");
			while(set.next()){
		        haslo=set.getString("haslo");
		        
		       
		}
			System.out.println("Haslo to "+haslo);
			return haslo;
			//System.out.println("tu jestem");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//System.out.println("login zle");
		return "";
	}
	public String test(){
		return "ble";
	}
	public static void main(String[] args){
	BazaS baza=new BazaS();
	//baza.zwrocHaslo();
	}
}

i jeszcze DBConnector


import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

//import oracle.jdbc.driver.OracleDriver;

public class DBConnector {
		private static DBConnector INSTANCE=new DBConnector();
        private static Connection CONNECTION_INSTANCE;
        private static Connection polaczenie;
        static int licznik=0;
        private DBConnector() {
        	 try {
        		 Class.forName("com.mysql.jdbc.Driver").newInstance();
      	        //Class.forName("oracle.jdbc.driver.OracleDriver");           
      	    } catch (Exception e) {
      	        System.out.println("Nie połączyłeś się z bazą");
      	    }
      	    
 			try {
 				polaczenie= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ipsi","root","admin");
 				System.out.println("polaczylem sie z baza");
 				//polaczenie = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","admin","admin");
 				
 			} catch (SQLException e) {
 				e.printStackTrace();
 			}
        }

        public static void init(Properties properties) throws SQLException{     
     	} 
        public static Connection getPolaczenie(){
        	   return polaczenie;
        	}
        public static Connection getCONNECTION_INSTANCE() {
                if (CONNECTION_INSTANCE == null){
                	licznik=licznik+1;
                	
                	new DBConnector();
                }
                System.out.println(licznik);
                return CONNECTION_INSTANCE;
        }

        @Override
        protected void finalize() throws Throwable {
                // Połączenie jest zamykane w momwncie niszczenia obiektu
        		polaczenie.close();
        }
        public static void main(String[] args){
        	new DBConnector();
        	
    		
        }
        }
0

Po pierwsze Twoje zapytanie pobierające hasło jest nie precyzyjne, ponieważ nie określa właściciela hasła. Zwraca zatem wszystkie hasła zapisane w tabeli ble. A potem do zmiennej haslo przypisujesz je pokolei - tak, że ostatecznie zwracasz to ostatnie.

Jeżeli NullPointerException, wywala w lini

haslo=set.getString("haslo");

może oznaczać, że zapytanie nie zwraca żadnego hasła.

Zrób zatem coś takiego:

If(!set.next()) return null; 
return set.getString("haslo");

Jeżeli błąd występuje w innym miejscu, daj pełen stackTrace

0

No w sumie na pewno nie o to chodzi, bo pętla while(set.next()) zostałaby w takim przypadku zakończona, a zmienna haslo została zainicjowana.

0

czy dorzucileś do classpath sterownik jdbc do mysql?

Twój kod u mnie działa. Czy nie dostajesz żadnych wyjątków?

1 użytkowników online, w tym zalogowanych: 0, gości: 1