简介
最近打算弄个聊天室,因为除了文件存储外还没学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;
}
}
好了,就这么多,复制记得注意上面的条件,看完看准条件再复制。