Java + MySQL存储用户消息或用户记录的封装

简易封装MySQL对用户操作的Java语句

简介

最近打算弄个聊天室,因为除了文件存储外还没学nosql,自学了MySQL,于是就打算搞点东西……em,就是注册用户、存储消息、销毁用户的功能,用Java语言写的,数据库在服务器,对没错,但本文的外网地址IP我写成本地的,也就是127.0.0.1
正题:
你需要准备如下东西,便于你更好地理解代码。

  • MySQL版本:5.7.13
  • Eclipse EE/SE 4.14.0±
  • JDK12+
  • 服务器公网IP:假设是127.0.0.1,如果你是本地就直接localhost
  • 数据库连接用户名:root
  • 数据库连接用户密码:12345
  • 数据库名:chatroom
  • 存储用户的数据表:existuser
  • existuser表字段:user_id, username, userpassword
  • 除此之外,每当你注册一个用户的时候,就会自动新建一个用于存储该用户消息的数据表,表名是用户名,字段为:TIME, message(其中,TIME是调用插入消息记录的时候执行now()方法加入当前时间)
  • package包名:priv.thdmi.main.modules

啥也不说直接上代码,后期完善

注意: 查询某个时间段的消息这两个接口还没实现

接口

package pub.thdmi.test.modules;// 这个是我自己瞎起的包名

import java.sql.SQLException;
import java.util.List;

public interface SQL {

	/**
	 * 验证用户账号及密码
	 * 
	 * @param verifyUserName     验证的用户名
	 * @param verifyUserPassword 验证的密码
	 * @return 验证成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean VerifyLoginUser(String verifyUserName, String verifyUserPassword)
			throws ClassNotFoundException, SQLException;

	/**
	 * 查找用户名
	 * 
	 * @param userName 用户名
	 * @return 查找成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean searchUserName(String userName) throws ClassNotFoundException, SQLException;

	/**
	 * 注册用户
	 * 
	 * @param createUserName     注册的用户名
	 * @param createUserPassword 注册密码
	 * @return 注册成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean createUserRecord(String createUserName, String createUserPassword)
			throws ClassNotFoundException, SQLException;

	/**
	 * 创建用户消息数据表
	 * 
	 * @param tableUserName 用户表名
	 * @return 创建成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean createMessageTable(String tableUserName) throws ClassNotFoundException, SQLException;

	/**
	 * 无需旧密码更新用户密码
	 * 
	 * @param updateUserName     用户名
	 * @param newUserPassword 更新的用户密码
	 * @return 更新成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean updateUserRecord(String updateUserName, String newUserPassword)
			throws ClassNotFoundException, SQLException;
	
	/**
	 * 需要旧密码更新用户密码
	 * @param updateUserName 用户名
	 * @param oldUserPassword 旧密码
	 * @param newUserPassword 新密码
	 * @return 更新成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean updateUserRecord(String updateUserName, String oldUserPassword, String newUserPassword)
			throws ClassNotFoundException, SQLException;

	/**
	 * 使用密码注销用户(记录及表)
	 * 
	 * @param deleteUserName     删除的用户名
	 * @param deleteUserPassword 删除的用户密码
	 * @return 注销成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean deleteUserRecord(String deleteUserName, String deleteUserPassword)
			throws ClassNotFoundException, SQLException;

	/**
	 * 无需密码注销用户(记录及表)
	 * 
	 * @param deleteUserName 删除的用户名
	 * @return 注销成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean deleteUserRecord(String deleteUserName) throws ClassNotFoundException, SQLException;

	/**
	 * 删除用户消息数据表
	 * 
	 * @param deleteTableName 删除的用户消息表名
	 * @return 删除成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean deleteMessageTable(String deleteTableName) throws ClassNotFoundException, SQLException;

	/**
	 * 清空数据表
	 * @param emptyTableName 待清空的数据表名
	 * @return 清空成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean emptyMessageTable(String emptyTableName)throws ClassNotFoundException, SQLException;
	
	/**
	 * 存储用户消息
	 * 
	 * @param userTableName 用户消息表名
	 * @param userMessage   待存消息
	 * @return 存储成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean saveMessages(String userTableName, String userMessage) throws ClassNotFoundException, SQLException;

	/**
	 * 查找时间段用户消息
	 * 
	 * @param tableUserName 用户消息表名
	 * @param startTime     起始时间
	 * @param endTime       结束时间
	 * @return 该时间段的用户消息列表
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public List<?> searchUserMessage(String tableUserName, String startTime, String endTime)
			throws ClassNotFoundException, SQLException;

	/**
	 * 查询用户全部消息
	 * 
	 * @param tableUserName 查询的用户名即消息表名
	 * @return 查询到的全部消息列表
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public List<?> searchUserMessage(String tableUserName) throws ClassNotFoundException, SQLException;

	/**
	 * 查找某个表的某个值
	 * 
	 * @param searchTable 查询的表名
	 * @param searchField 查询的字段
	 * @param searchValue 查询关键字
	 * @return 查询成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean searchValues(String searchTable, String searchField, String searchValue)
			throws ClassNotFoundException, SQLException;
	
	/**
	 * 查找某个表是否存在
	 * @param searchdbName 查询的数据库名
	 * @param searchTableName 查询的表名
	 * @return 查询成功或失败
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean searchTable(String searchdbName, String searchTableName)throws ClassNotFoundException, SQLException;
}

实现接口

package pub.thdmi.test.modules;

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

public class MySQL implements SQL {
	// 驱动名
	private static String Connection_DriverName = "com.mysql.jdbc.Driver";
	// 数据库用户名
	private static String Connection_UserName = "root";
	// 密码
	private static String Connection_UserPassword = "12345";
	// 数据库名
	private static String Connection_dbName = "chatroom";
	// server IP
	private static String Connection_IPaddress = "127.0.0.1";
	// 连接字符串,useSSL是为了避免出现服务器未认证的警告
	private static String url = "jdbc:mysql://" + Connection_IPaddress + "/" + Connection_dbName + "?user="
			+ Connection_UserName + "&password=" + Connection_UserPassword + "&useSSL=false";
	// 存储用户的数据表名
	private static String tableExistUser = "existuser";// 已存在的用户数据表
	// 存储用户的数据表字段
	private static String fieldUserName = "username";
	private static String fieldUserPassword = "userpassword";
	// 存储用户消息的数据表字段
	private static String message_FieldTime = "TIME";
	private static String message_Fieldmessage = "message";

	@Override
	public boolean VerifyLoginUser(String verifyUserName, String verifyUserPassword)
			throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "select * from " + tableExistUser + " where " + fieldUserName + " = '" + verifyUserName + "' and "
				+ fieldUserPassword + " = '" + verifyUserPassword + "'";
		ResultSet resultset = statement.executeQuery(sql);
		if (resultset.next()) {
			resultset.close();
			connection.close();
			return true;
		} else {
			resultset.close();
			connection.close();
			return false;
		}

	}

	@Override
	public boolean searchUserName(String userName) throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "select * from " + tableExistUser + " where " + fieldUserName + " = '" + userName + "'";
		ResultSet resultset = statement.executeQuery(sql);
		if (resultset.next()) {
			resultset.close();
			connection.close();
			return true;
		} else {
			resultset.close();
			connection.close();
			return false;
		}
	}

	@Override
	public boolean createUserRecord(String createUserName, String createUserPassword)
			throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "insert into " + tableExistUser + " (" + fieldUserName + "," + fieldUserPassword + ") values ('"
				+ createUserName + "','" + createUserPassword + "')";
		// 查询是否已经存在用户名
		ResultSet resultset = statement.executeQuery("select " + fieldUserName + " from " + tableExistUser + " where "
				+ fieldUserName + " = '" + createUserName + "'");
		if (!resultset.next() && !searchTable(Connection_dbName, createUserName)) { // 用户名不存在的情况下
			resultset.close();
			statement.executeUpdate(sql); // 执行插入用户记录SQL
			createMessageTable(createUserName); // 同时新建一个存储新用户消息的数据表
			connection.close();
			return true;
		} else {
			resultset.close();
			connection.close();
			return false;
		}
	}

	@Override
	public boolean createMessageTable(String tableUserName) throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "create table if not exists " + Connection_dbName + "." + tableUserName + " (" + message_FieldTime
				+ " datetime(0) not null," + message_Fieldmessage + " varchar(255) character set gb18030 null,"
				+ "primary key (" + message_FieldTime + "))" + " engine = InnoDB character set gb18030";
		statement.executeUpdate(sql);
		connection.close();
		return true;
	}

	@Override
	public boolean updateUserRecord(String updateUserName, String newUserPassword)
			throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "update " + tableExistUser + " set " + fieldUserPassword + " = '" + newUserPassword + "' where "
				+ fieldUserName + " = '" + updateUserName + "'";
		int resultset = statement.executeUpdate(sql);
		if (resultset != 0) {
			connection.close();
			return true;
		} else {
			connection.close();
			return false;
		}
	}

	@Override
	public boolean updateUserRecord(String updateUserName, String oldUserPassword, String newUserPassword)
			throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "update " + tableExistUser + " set " + fieldUserPassword + " = '" + newUserPassword + "' where "
				+ fieldUserName + " = '" + updateUserName + "'";
		if (VerifyLoginUser(updateUserName, oldUserPassword)) {
			statement.executeUpdate(sql);
			connection.close();
			return true;
		} else {
			connection.close();
			return false;
		}

	};

	@Override
	public boolean deleteUserRecord(String deleteUserName, String deleteUserPassword)
			throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "delete from " + tableExistUser + " where " + fieldUserName + " = '" + deleteUserName + "'";
		int result = 0;
		if (searchValues(tableExistUser, fieldUserName, deleteUserName)
				&& searchValues(tableExistUser, fieldUserPassword, deleteUserPassword))
			result = statement.executeUpdate(sql);
		connection.close();
		if (result != 0 && deleteMessageTable(deleteUserName))
			return true;
		return false;
	}

	@Override
	public boolean deleteUserRecord(String deleteUserName) throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "delete from " + tableExistUser + " where " + fieldUserName + " = '" + deleteUserName + "'";
		int result = 0;
		if (searchValues(tableExistUser, fieldUserName, deleteUserName))
			result = statement.executeUpdate(sql);
		connection.close();
		if (result != 0 && deleteMessageTable(deleteUserName))
			return true;
		return false;
	}

	@Override
	public boolean deleteMessageTable(String deleteTableName) throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "drop table " + Connection_dbName + "." + deleteTableName;
		if (searchTable(Connection_dbName, deleteTableName)) {
			statement.execute(sql);
			connection.close();
			return true;
		}
		connection.close();
		return false;
	}

	@Override
	public boolean emptyMessageTable(String emptyTableName) throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "truncate table " + emptyTableName;
		statement.executeUpdate(sql);
		connection.close();
		return true;
	}

	@Override
	public boolean saveMessages(String userTableName, String userMessage) throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "insert into " + userTableName + " (" + message_FieldTime + ", " + message_Fieldmessage
				+ ") values (now(), '" + userMessage + "')";
		statement.execute(sql);
		connection.close();
		return true;
	}

	// 未实现的接口
	@Override
	public List<?> searchUserMessage(String tableUserName, String startTime, String endTime)
			throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "";
		statement.execute(sql);
		return null;
	}

	// 未实现的接口
	@Override
	public List<?> searchUserMessage(String tableUserName) throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "";
		statement.execute(sql);
		return null;
	}

	@Override
	public boolean searchValues(String searchTable, String searchField, String searchValue)
			throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "select * from " + searchTable + " where " + searchField + " = '" + searchValue + "'";
		ResultSet resultset = statement.executeQuery(sql);
		if (resultset.next()) {
			resultset.close();
			connection.close();
			return true;
		}
		resultset.close();
		connection.close();
		return false;
	}

	@Override
	public boolean searchTable(String searchdbName, String searchTableName)
			throws ClassNotFoundException, SQLException {
		Class.forName(Connection_DriverName);
		Connection connection = DriverManager.getConnection(url);
		Statement statement = connection.createStatement();
		String sql = "show tables where Tables_in_" + searchdbName + " = '" + searchTableName + "'";
		ResultSet resultset = statement.executeQuery(sql);
		if (resultset.next()) {
			resultset.close();
			connection.close();
			return true;
		}
		resultset.close();
		connection.close();
		return false;
	}

}

好了,就这么多,复制记得注意上面的条件,看完看准条件再复制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章