簡體   English   中英

檢查數據庫中的用戶是否被禁止使用JDBC

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM