2010-07-22 11 views
0

Je voudrais écrire à mon DB Oracle l'ID utilisateur et l'adresse IP de l'utilisateur connecté (application web) chaque fois que j'effectue SQL UPDATEs et INSERTs. Tels queJava web application DAO écriture authentifiée UserID et adresse IP à DB

public static int updateUser(STKUser user, STKUser loggedIn) throws DAOException { 
    Connection connection = null; 
    connection = DB.getConnFromCache(); 

    PreparedStatement ps = null; 

String query = "INSERT INTO xtblPersonnel (pID, pPssWrd, pAdminDate, pAdminIP, pAdminBy) VALUES (?,?,SYSDATE,?,?)"; 
    try { 
    ps = connection.prepareStatement(query); 
    ps.setString(1, user.getBadge()); 
    ps.setString(2, user.getPassword()); 
    ps.setString(3, loggedIn.getIpAddress()); 
    ps.setString(4, loggedIn.getBadge()); 
    return ps.executeUpdate(); 
    } 
    catch (Exception e) { 
    System.out.println("SQL Exception inserting new user with badge: " + user.getBadge() + ". Error Message: " + e.getMessage()); 
    LOGGER.log(Level.INFO, "SQL Exception inserting new user with badge: " + user.getBadge() + ". Error Message: " + e.getMessage(), user); 
    throw new DAOException("SQL Exception inserting new user!"); 
    // return 0; 
    } 

    finally { 
    DB.closePreparedStatement(ps); 
    DB.releaseConnToCache(connection); 
    } 

}

STKuser est un Javabean

Mon application utilise un nom d'utilisateur d'Oracle général et mot de passe pour c'est la raison pour laquelle je veux enregistrer qui a fait la mise à jour ou d'insérer et de quelle machine.

Est-ce une approche acceptable. J'avais l'habitude de passer dans la session mais j'ai réalisé que c'est un non non.

+0

Difficile à dire à partir des informations données. Pourquoi 2 objets STKUser? Ils semblent représenter le même utilisateur est ma conjecture. Où initialisez-vous PreparedStatement et la connexion? Où est le bloc catch? Pourquoi cette méthode est-elle déclarée statique? –

+0

un objet STKUser représentait les données de l'employé en cours d'ajout à la base de données et le deuxième objet STKUser représentait l'administrateur connecté en faisant le SQL INSERT. J'ai édité ma réponse pour inclure plus de code – jeff

Répondre

0

En supposant que vous fermez correctement toutes les ressources DB comme Connection, Statement et ResultSet dans le bloc finally du bloc try où vous les avez achetés et le code fait ce qu'il doit faire, je ne prévois pas de problèmes avec le approche en question. Il n'y a aucun risque pour les injections SQL puisque vous utilisez PreparedStatement, si cela vous préoccupait réellement. Déclarer la méthode static est cependant un peu une odeur, mais nous devons en savoir plus sur le contexte dans lequel le code s'exécute.

+0

statique parce que la méthode est juste CRUD. Mais j'apprends encore J2EE. La façon dont je l'appelle, éclipse m'a incité à le changer en staic. si tout est bon sur le formulaire, puis j'appelle: STKUserDAO.insert (formUser, loggedInUser); – jeff