簡介
最近打算弄個聊天室,因爲除了文件存儲外還沒學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;
}
}
好了,就這麼多,複製記得注意上面的條件,看完看準條件再複製。