[英]Check if user in a database is banned JDBC
使用oracle數據庫,我需要執行檢查以查看“用戶”表中的用戶是否被禁止。 如果用戶的“已禁用”列的值為“ 1”,則禁止該用戶,否則則為“ 0”。
我在這里有以下工作代碼:
public boolean banUser(String username)
{//TODO check if user is banned already
try
{
pstmnt = conn.prepareStatement("UPDATE users SET banned = 1 WHERE username = ?");
pstmnt.setString(1, username);
pstmnt.execute();
logger.info("Banned User : " + username);
return true;
} catch ( SQLException e ) { e.getMessage(); }
return false;
}
我不確定如何在准備好的語句之上執行if語句。 有任何想法嗎?
從以下更改更新聲明:
conn.prepareStatement("UPDATE users SET banned = 1 WHERE username = ?");
至:
conn.prepareStatement("UPDATE users SET banned = 1 WHERE username = ? and banned = 0");
然后使用executeUpdate()
而不是execute()
執行它。 區別在於executeUpdate
返回受更新影響的行數,因此如果用戶已被禁止,則無需執行SQL語句即可檢索。
//...
pstmnt = conn.prepareStatement("UPDATE users SET banned = 1 WHERE username = ? and banned = 0");
pstmnt.setString(1, username);
int affectedRows = pstmnt.executeUpdate();
boolean wasUserBanned = affectedRows > 0;
//...
使用此查詢,並將結果存儲在ResultSet
SELECT * FROM users WHERE username = ? AND banned = 1
這將返回所有具有特定用戶名的禁止用戶。
pstmnt = conn.prepareStatement("SELECT * FROM users WHERE username = ? AND banned = 1");
pstmnt.setString(1, username);
ResultSet rs = pstmnt.executeQuery();
if(rs.next()) {
//The user is banned
} else {
//The user is not banned
}
如果要使用方法版本:
public boolean isUserBanned(String user) throws SQLException {
pstmnt = conn.prepareStatement("SELECT * FROM users WHERE username = ? AND banned = 1");
pstmnt.setString(1, username);
ResultSet rs = pstmnt.executeQuery();
return rs.next();
}
這是我對@BackSlash版本的變體,假設username
具有UNIQUE約束:
pstmnt = conn.prepareStatement(
"SELECT COUNT(*) FROM users WHERE username = ? AND banned = 1");
pstmnt.setString(1, username);
ResultSet rs = pstmnt.executeQuery(); // Always returns exactly one row.
rs.next();
return rs.getBoolean(1); // Converts 0, 1 to false, true.
您可以讓數據庫做更多的工作
CREATE VIEW BANNED_USERS AS
SELECT username FROM USERS
WHERE banned = 1;
更新后運行選擇:
pstmnt = conn.prepareStatement("SELECT banned FROM users WHERE username = ?");
Resultset rs = pstmnt.execute();
pstmnt.setString(1, username);
int isBanned = 0;
while(rs.next()) {
isBanned = rs.getInt(1);
}
if(isBanned == 1) {
System.out.println("User is banned")
}
重用您的代碼:(假設用戶已經存在)
public boolean isUserBanned(String username)
{//TODO check if user is banned already
try
{
pstmnt = conn.prepareStatement("select username WHERE username = ? and banned = 1");
pstmnt.setString(1, username);
Resultset rs = pstmnt.executeQuery();
//logger.info("Banned User : " + username);
return rs.next();
} catch ( SQLException e ) { e.getMessage(); }
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.