⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdbcusersinfomanager.java

📁 enable to do work a local chat in java using UDP
💻 JAVA
字号:
package fr.iutvalence.java.tp8.chat.server;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import fr.iutvalence.java.tp8.chat.server.exceptions.InformationAccessException;
import fr.iutvalence.java.tp8.chat.server.exceptions.NotConnectedException;
import fr.iutvalence.java.tp8.chat.server.exceptions.UnknownUserException;

/**
 * IExercice d'application sur l'utilisation de JDBC (TP8)<br/>.Implémentation
 * d'un gestionnaire d'informations utilisateurs JDBC pour la partie serveur
 * d'un salon de conversation en TCP, version augmentée avec authentification,
 * ... <br/><br/> 
 * 
 * Commentaires à sebastien.jean@iut-valence.fr
 * 
 * @author Sébastien JEAN, IUT Valence, oct. 2006
 * @version 1.0
 */
public class JDBCUsersInfoManager implements UsersInfoManager
{
	/**
	 * La connexion à la base de données
	 */
	private Connection connection;

	/**
	 * Un émetteur de requêtes
	 */
	private Statement statement;

	/**
	 * Constructeur avec paramètres. Initialisation du gestionnaires par ouverture
	 * d'une connexion à une BD distante via JDBC.
	 * 
	 * @param driverClassName le nom de la classe du driver JDBC à utiliser
	 * @param databaseURL l'url de la base de données sur laquelle se connecter.
	 * @param username le nom d'utilisateur pour l'ouverture de la connexion sur
	 *        la BD.
	 * @param password le mot de passe pour l'ouverture de la connexion sur la
	 *        BD.
	 * @throws ClassNotFoundException si la classe du driver JDBC n'a pas pu
	 *         être chargée.
	 * @throws SQLException si la connexion avec la base n'a pu être ouverte.
	 */
	public JDBCUsersInfoManager(String driverClassName, String databaseURL,
			String username, String password) throws ClassNotFoundException,
			SQLException
	{
		// Chargement du driver JDBC
		Class.forName(driverClassName);

		// Connexion à la base
		this.connection = DriverManager.getConnection(databaseURL, username,
				password);

		// Création d'un émetteur de requêtes
		this.statement = this.connection.createStatement();
	}

	/**
	 * Terminaison propre de l'utilisation du gestionnaire d'informations
	 * (méthode appelée directement par le ramasse-miettes à l'arrêt de l'
	 * application). En particulier, la connexion à la base de données est
	 * close.
	 * 
	 * @see java.lang.Object#finalize()
	 */
	public void finalize()
	{
		try
		{
			// Libération du statement
			this.statement.close();

			// Fermeture de la connexion
			this.connection.close();
		}
		catch (Exception e)
		{
			// Peu importe si une erreur survient
		}
	}

	/**
	 * Obtention du mot de passe associé à un utilisateur
	 * 
	 * @param pseudo le pseudonyme de l'utilisateur
	 * @return le mot de passe associé à l'utilisateur <tt>pseudo</tt> s'il
	 *         existe.
	 * @throws UnknownUserException si le pseudonyme ne désigne pas un
	 *         utilisateur connnu.
	 * @throws InformationAccessException si l'accès à l'information échoue.
	 */
	public String getPassword(String pseudo) throws UnknownUserException,
			InformationAccessException
	{
		String password = null;

		// Définition de la requête à envoyer
		String query = "SELECT password FROM users WHERE pseudo = '" + pseudo
				+ "';";

		// Envoi de la requête et traitement du résultat
		try
		{
			ResultSet rs = this.statement.executeQuery(query);

			// Une table résultat vide indique que le pseudonyme est inconnu
			if (!(rs.absolute(1)))
				throw new UnknownUserException();

			// Obtention du mot de passe
			password = rs.getString("password");
		}
		catch (SQLException e)
		{
			throw new InformationAccessException();
		}

		return password;
	}

	/**
	 * Obtention de l'état de présence d'un utilisateur connecté.
	 * 
	 * @param pseudo le pseudonyme de l'utilisateur.
	 * @return <tt>true</tt> si l'utilisateur <tt>pseudo</tt> est connecté
	 *         et présent, <tt>false</tt> si l'utilisateur <tt>pseudo</tt>
	 *         est connecté et absent.
	 * @throws UnknownUserException si le pseudonyme ne désigne pas un
	 *         utilisateur connu.
	 * @throws NotConnectedException si l'utilisateur <tt>pseudo</tt> n'est
	 *         pas connecté.
	 * @throws InformationAccessException si l'accès à l'information échoue.
	 */
	public boolean getAwayState(String pseudo) throws UnknownUserException,
			NotConnectedException, InformationAccessException
	{
		boolean away = true;

		// Définition de la requête à envoyer
		String query = "SELECT away FROM users WHERE pseudo = '" + pseudo
				+ "';";

		// Envoi de la requête et traitement du résultat
		try
		{
			ResultSet rs = this.statement.executeQuery(query);

			// Une table résultat vide indique que le pseudonyme est inconnu
			if (!(rs.absolute(1)))
				throw new UnknownUserException();

			// Obtention de l'état de présence
			away = rs.getBoolean("away");
		}
		catch (SQLException e)
		{
			throw new InformationAccessException();
		}

		return away;
	}

	/**
	 * Modification de l'état de présence d'un utilisateur connecté.
	 * 
	 * @param pseudo le pseudonyme de l'utilisateur.
	 * @param away le nouvel état de présence.
	 * @throws UnknownUserException si le pseudonyme ne désigne pas un
	 *         utilisateur connu.
	 * @throws NotConnectedException si l'utilisateur <tt>pseudo</tt> n'est
	 *         pas connecté.
	 * @throws InformationAccessException si l'accès à l'information échoue.
	 */
	public void setAwayState(String pseudo, boolean away)
			throws UnknownUserException, NotConnectedException,
			InformationAccessException
	{
		// Vérification de l'état de connexion du client
		if (!(this.getConnectionState(pseudo)))
			throw new NotConnectedException();

		// Définition de la requête à envoyer
		String query = "UPDATE users SET away = '" + away
				+ "' WHERE pseudo = '" + pseudo + "';";

		// Envoi de la requête et traitement du résultat
		try
		{
			this.statement.executeUpdate(query);
		}
		catch (SQLException e)
		{
			throw new InformationAccessException();
		}
	}

	/**
	 * Obtention de l'état de connexion d'un utilisateur.
	 * 
	 * @param pseudo le pseudonyme de l'utilisateur.
	 * @return <tt>true</tt> si l'utilisateur <tt>pseudo</tt> est connecté,
	 *         <tt>false</tt> sinon.
	 * @throws UnknownUserException si le pseudonyme ne désigne pas un
	 *         utilisateur connu.
	 * @throws InformationAccessException si l'accès à l'information échoue.
	 */
	public boolean getConnectionState(String pseudo)
			throws UnknownUserException, InformationAccessException
	{
		boolean connected = true;

		// Définition de la requête à envoyer
		String query = "SELECT connected FROM users WHERE pseudo = '" + pseudo
				+ "';";

		// Envoi de la requête et traitement du résultat
		try
		{
			ResultSet rs = this.statement.executeQuery(query);

			// Une table résultat vide indique que le pseudonyme est inconnu
			if (!(rs.absolute(1)))
				throw new UnknownUserException();

			// Obtention de l'état de connexion
			connected = rs.getBoolean("connected");
		}
		catch (SQLException e)
		{
			throw new InformationAccessException();
		}

		return connected;
	}

	/**
	 * Modification de l'état de connexion d'un utilisateur.
	 * 
	 * @param pseudo le pseudonyme de l'utilisateur.
	 * @param connected le nouvel état de connexion.
	 * @throws UnknownUserException si le pseudonyme ne désigne pas un
	 *         utilisateur connu.
	 * @throws InformationAccessException si l'accès à l'information échoue.
	 */
	public void setConnectionState(String pseudo, boolean connected)
			throws UnknownUserException, InformationAccessException
	{
		// Vérification de la validité du pseudonyme
		String query0 = "SELECT * FROM users WHERE pseudo = '" + pseudo + "';";

		// Envoi de la requête et traitement du résultat
		try
		{
			ResultSet rs = this.statement.executeQuery(query0);

			// Une table résultat vide indique que le pseudonyme est inconnu
			if (!(rs.absolute(1)))
				throw new UnknownUserException();
		}
		catch (SQLException e)
		{
			throw new InformationAccessException();
		}

		// Définition de la requête à envoyer
		String query = "UPDATE users SET connected = '" + connected
				+ "' WHERE pseudo = '" + pseudo + "';";

		// Envoi de la requête et traitement du résultat
		try
		{
			this.statement.executeUpdate(query);
		}
		catch (SQLException e)
		{
			throw new InformationAccessException();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -