2010-11-26 106 views
2

当我从MyServ类调用getName时,我得到null,但是当我从DBClass本地调用它们时,它们返回字符串。有人知道我做错了什么?Java getter方法返回null而不是字符串

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

因为你在'db'上调用'doConnect',但在MyServ构造函数内调用'dbclass'? – ptomli 2010-11-26 10:22:52

回答

4

当然,你的意思是:代替

name = db.getName(); 

name = dbclass.getName(); 

你似乎引用在构造函数中的错误变量,一个没有打开的连接(dbclass)。

1

简单,因为该值是null(其字符串,种)。

看看代码的相关位。在你MyServ构造函数,你这样做:

dbclass = new DBClass(); 

按照DBClass构造函数,这个函数初始化所有字段为默认值(这对于一个字符串是null)。

然后,你不要再直到调用使用这个变量:

dbclass.getName(); 

其正确去并查找name变量 - 这是无效的,因为对象是构建,当它被隐含赋值为null - 并返回给你。

也许一个更好的问题是,你是什么期望它返回,为什么?

相关问题