2010-11-26 108 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 - 並返回給你。

也許一個更好的問題是,你是什麼期望它返回,爲什麼?

相關問題