2014-01-23 164 views
0

我需要檢查與用戶名的可用性檢查在數據庫中唯一值約束,這意味着,每個用戶名必須是唯一的,我需要顯示一個消息「該用戶名已在使用中」的時候已存在的相同的用戶名它可以是自動的(生成一個查詢,然後顯示一條消息)或創建一個按鈕來驗證可用性,然後顯示一條消息。我對這個簡單的程序並不清楚。在這種情況下我需要做什麼? 的源代碼是像這樣:從用戶註冊

Person類

@Entity 
@Table(name="person") 
public class Person { 

    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE) 
    @Column(name="id") 
    private int id; 

    @Column(name="firtsname") 
    private String first_name; 

    @Column(name="lastname") 
    private String last_name; 

    @Column(name="username", unique=true) 
    private String user_name; 

    @Column(name="password") 
    private String password; 

    // Getters and Setters 
} 

PersonDao的>> PersonDaoImpl

@Repository("personDao") 
public class PersonDaoImpl implements PersonDao { 

@Autowired 
private SessionFactory sessionFactory; 

@Override 
public void createPerson(Person person) { 
    sessionFactory.getCurrentSession().saveOrUpdate(person); 

} 

@Override 
public Person updatePerson(int id) { 
    return (Person) sessionFactory.getCurrentSession().get(Person.class, id); 

} 

@Override 
public void deletePerson(int id) { 
    sessionFactory.getCurrentSession().createQuery("DELETE FROM Person WHERE id="+id).executeUpdate(); 

} 

@Override 
@SuppressWarnings("unchecked") 
public List<Person> listAllPersons() { 
    return (List<Person>) sessionFactory.getCurrentSession().createCriteria(Person.class).list(); 

} 

} 

登記表(registration.jsp):

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
<form:form method="POST" action="/userform/saveUser.html"> 
    <p> 
     <form:input type="hidden" readonly="true" path="id" /> 
    </p> 
    <p> 
     <form:label path="first_name" >First name:</form:label> 
     <form:input path="first_name" /> 
    </p> 
    <p> 
     <form:label path="last_name">Last name:</form:label> 
     <form:input path="last_name" /> 
    </p> 
    <p> 
     <form:label path="user_name">Username:</form:label> 
     <form:input path="user_name" /> 
    </p> 
    <p> 
     <form:label path="password">Password:</form:label> 
     <form:input path="password" /> 
    </p> 
    <p> 
     <button type="reset" value="Reset">Reset</button> 
     <button type="submit" value="Save">Save</button> 
    </p> 

</form:form> 
</body> 
</html> 

非常感謝!

回答

0
SELECT id FROM table_name WHERE id = "user_key" 

如果它返回選定的用戶名,那麼你知道你已經得到它。一旦你知道它,你的佈局功能可以顯示消息「這個用戶名被採取」。如果您在數據庫中使用id單元格unique,這也會很好。就這樣。 PS:如果你的身份證號碼是unique,那麼你的號碼可以是INSERT,並且可以發現異常。那是第二個解決方案。

1

只要嘗試插入並處理失敗。任何其他方法都容易遇到時間窗問題。

+0

另外的解決方案包含一個select和one insert,考慮select通常認爲是一個沉重的操作,這樣你節省select – nightograph

+0

@EJP你的回答聽起來不錯。你可以用源代碼解釋嗎?從我的用戶註冊表(registrarion.jsp)...我如何檢查數據庫中是否已經存在一個具有相同名稱的用戶名? – user3043914