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;
	}

}

好了,就這麼多,複製記得注意上面的條件,看完看準條件再複製。

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