2010-11-26 11 views
2

Wenn ich getName von MyServ-Klasse aufrufen, bekomme ich null, aber wenn ich sie lokal von DBClass aufrufen, geben sie Zeichenfolgen zurück. Weiß jemand, was ich falsch mache?Java-Getter-Methoden, die null anstelle der Zeichenfolge zurückgeben

package DB; 

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

public class DBClass{ 

    private Statement stmt; 
    private Connection conn; 
    private ResultSet result; 
    public String name, surname; 

    public DBClass(){ 
    } 

    public Connection dbConnect(final String db_connect_string, 
     final String db_userid, 
     final String db_password){ 

     try{ 
      DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); 

      conn = 
       DriverManager.getConnection(db_connect_string, db_userid, 
        db_password); 

      stmt = conn.createStatement(); 
      result = stmt.executeQuery("Select * from .....etc"); 

      if(result.next()){ 
       name = result.getString(1).toString(); 
       surname = result.getString(2).toString(); 
      } 
      return conn; 

     } catch(final Exception e){ 
      e.printStackTrace(); 

      return null; 
     } 
    } 

    public String getName(){ 
     return name; 
    } 

    public String getSurname(){ 
     return surname; 
    } 

} 




package DB; 

import java.io.IOException; 
import java.sql.Connection; 

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

/** 
* Servlet implementation class MyServ 
*/ 
public class MyServ extends HttpServlet{ 

    private static final long serialVersionUID = 1L; 
    private final DBClass dbclass; 
    private final String name, surname; 

    private final Connection conn; 

    public MyServ(){ 

     dbclass = new DBClass(); 
     final DBClass db = new DBClass(); 

     conn = 
      db.dbConnect("jdbc:oracle:thin:@elanweb:1510:xxxxx", "xxxxx", 
       "xxxxxx"); 

     name = dbclass.getName(); 
     surname = dbclass.getSurname(); 
    } 

    @Override 
    protected void doGet(final HttpServletRequest request, 
     final HttpServletResponse response) throws ServletException, 
     IOException{ 

    } 

    @Override 
    protected void doPost(final HttpServletRequest request, 
     final HttpServletResponse response) throws ServletException, 
     IOException{ 

     System.out.println("MyServer -- " + name + " " + surname); 
     response.sendRedirect("http://localhost:8080/DWP/"); 

    } 
} 
+1

Weil Sie 'doConnect' auf 'db', aber nicht 'dbclass' im MyServ-Konstruktor aufrufen? – ptomli

Antwort

4

Sicher meinen Sie:

name = db.getName(); 

statt:

name = dbclass.getName(); 

Sie scheinen die falsche Variable in den Konstruktor zu verweisen, das eine ohne eine offene Verbindung (dbclass).

1

Ganz einfach, weil der Wert istnull (die ist ein String, Art).

Sehen Sie sich die relevanten Bits des Codes an. In Ihrem MyServ Konstruktor, was Sie tun:

dbclass = new DBClass(); 

Nach dem DBClass Konstruktor, diese alle Felder initialisiert auf die Standardwerte (was für ein String ist null).

Dann diese Variable Sie nicht wieder verwenden, bis Sie rufen:

dbclass.getName(); 

, die richtig geht und die name Variable sucht - die null ist, weil es null implizit zugewiesen wurde, wenn das Objekt gebaut wurde - und gibt dir das zurück.

Vielleicht ist eine bessere Frage, was hast du erwarten es zurückzukehren, und warum?

Verwandte Themen