2012-03-23 53 views
-4

而不是在每個servlet中編寫太多的sql語句我只想在java類中編寫一個sql語句,並且希望從每個servlet調用該類,但是我沒有找到正確的方法來執行此操作。java類中的簡單返回

的SQL語句是:select distinct username from table where userid=?

while (rs.next){ 
    username=rs.getString(1); 
} 

我想回到username到每個servlet 所以我創造了在NetBeans Java類:

public class Username { 
    //How should I proceed here?   
} 
+0

你的問題並不十分清楚。你想讓這堂課做什麼?你到目前爲止有什麼? – 2012-03-23 09:35:33

+0

只是我想在每個jsp/servlet中從'class'返回'username(在rs.next())',這個類與servlets/jsps無關,只是我想在'jsp中顯示'username' 。所以我有5個jsp頁面,每次都不用寫5次sql語句,我想通過從'java class'返回'username'來顯示'username(在rs.next())' – Tom 2012-03-23 09:39:54

+0

任何想法Mike請給任何建議 – Tom 2012-03-23 09:43:01

回答

2

不要嵌入的代碼servlet的。

創建一個獨立的POJO,爲您完成工作。編寫它,測試它,並給出需要其服務的任何servlet的引用。讓servlet調用執行該邏輯的一個方法。

開始與接口:

package persistence; 

public inteface UserDao { 
    String getUsername(Long userId); 
} 

然後給它的實現:

package persistence; 

public class UserDaoimpl implements UserDao { 
    public String getUsername(Long userId) { 
     // All the SQL stuff here 
    } 
} 

你的servlet將不得不對它的引用:

private UserDao userDao = new UserDaoImpl(); 

該servlet應該獲得連接池並將其提供給DAO。

如果你有寫操作,我建議你創建一個單獨的服務層。服務知道工作單位。他們會比你的網絡用戶界面和這些servlet活躍起來。

+0

非常感謝duffymo對於你的回答只是一個疑問,我應該在哪個類中放置return語句? – Tom 2012-03-23 09:50:39

+0

當然,在返回用戶名的方法中。 – duffymo 2012-03-23 09:51:36

+0

有一個更多的疑問是我從'HttpSession session = request.getSession(false)'獲得'userid';'但該類中的'request'錯誤。任何建議請 – Tom 2012-03-23 10:13:08

2

我想我得到了你的問題。 我希望你能在下面的代碼答案: -

public class Username { 

    public String getUserName(Long userId) { 
     String userName = ""; 
     //all your sql code here 
     return userName; 
    } 
} 

寫下面的代碼在servlet類

Username uName = new Username(); 
uName.getUserName(userId); 
+0

是的bhavesh好方法,但在servlet中,我應該如何調用這個'userName'? – Tom 2012-03-23 09:54:08

+0

@Tom看到更新的答案 – bhavesh1988 2012-03-23 11:00:17

0

與其說每次類的形式每個servlet獲取用戶名,爲什麼你做的不使用ServletContext

ServletContext context = getServletContext(); 
context.setAttribute("username", username); 

或不同的方式提出,POJO類到會話屬性或上下文屬性