检查记录是否存在的最佳方法

时间:2016-02-07 15:26:32

标签: java mysql

检查用户是否存在的最佳方法是什么

我已经写了这段代码

try{
PreparedStatment mPre=conn.preparedStatement(INSERT INTO TABLE VALUES(?,?);
}catch(Exception e)
{
if(e.getMessage().contains("Dublicated"))
{
throw new Exception("user is exist");
}
}finally {
mPre.close();
conn.close();

}

我的朋友告诉我这是愚蠢的查询 我应该这样做

Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery("SELECT COUNT(*) AS total FROM .......");
int cnt = rs.getInt("total");

3 个答案:

答案 0 :(得分:0)

你的朋友是对的。您可以通过查询检查行是否存在:

SELECT EXISTS(SELECT 1 FROM *table* WHERE *something*)

答案 1 :(得分:0)

当您尝试验证用户表中是否存在给定的用户名和密码时,您应该使用PreparedStatment,因为它可以帮助您保护应用程序免受SQL注入。

<强>但是

将新用户插入数据库不是进行用户验证的正确方法。

您可以执行以下示例:

 String selectSQL = "SELECT * FROM USER_TABLE WHERE USER_ID = ? AND PASSWORD = ?";
 PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
 preparedStatement.setInt(1, 1001);
 preparedStatement.setString(2, "1234");
 ResultSet rs = preparedStatement.executeQuery(selectSQL );
 while (rs.next()) {
     //You will need user information to render dashborad of your web application
     String userid = rs.getString("USER_ID");
     String username = rs.getString("USERNAME");    
 }

完整代码参考:http://www.mkyong.com/jdbc/jdbc-preparestatement-example-select-list-of-the-records/

答案 2 :(得分:0)

只要您尝试插入一个破坏数据库表的唯一主键约束的行,并且抛出的异常具有包含单词&#34; duplicated&#34;的堆栈跟踪。那么你的代码应该可以正常工作  
但是,如果堆栈跟踪发生变化并且不包含该单词,那么您的代码将不再适用。
您更有可能尝试插入具有唯一主键值但具有现有用户名的行,这不会给您带来您希望的错误。这就是为什么检索该用户名的结果并计算有多少结果会更聪明/更安全的原因。