本文档描述了Server端接收到Client的消息并转发给所有客户端或私发给某个客户端

同时将聊天消息保存到mysql

服务端为当前客户端创建一个线程,此线程接收当前客户端的消息并转发给所有客户端或私发给某个客户端同时将聊天消息保存到mysql

本文档主要总结了将聊天消息保存到mysql !!!

一、mysql:

mysql数据库中创建chatinfo表。

create table chatinfo(
    id int auto_increment,
    from_user varchar(40) null,
    to_user varchar(40) null,
    content varchar(400),
    constraint chatinfo_pk  primary key (id)

);

二、DBUtil工具类:

 

package chat4_all;
import java.sql.Connection;
import java.sql.SQLException;
import com.alibaba.druid.pool.DruidDataSource;
/**用druid连接池来连接数据库的工具类*/
public class DBUtil {
    //1.DruidDataSource(可以理解为连接池)
    private static DruidDataSource ds = new DruidDataSource();

    static {
        //设置数据库的地址        
ds.setUrl("jdbc:mysql:
//localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true"); ds.setUsername("root");//给DruidDataSource ds设置数据库用户名 ds.setPassword("root");//给DruidDataSource ds设置数据库密码 ds.setInitialSize(10);//给DruidDataSource ds初始容量 ds.setMaxActive(20);//给DruidDataSource ds最大连接数 } //2.用给DruidDataSource ds获取数据库连接的方法 public static Connection getConnection() throws SQLException { return ds.getConnection(); } }

 

三、导入jar

3.1.创建lib软件包: 

 

3.2.druid-1.1.20.jarmysql-connector-java-8.0.23.jar粘贴到chat4.lib软件包中:

 

 

3.3.然后将jar包设置为项目的类库:

druid-1.1.20.jar上点右键然后按下图方式点击add as library

mysql-connector-java-8.0.23.jar上点右键然后按下图方式点击add as library 

 

 四、Server端:

4.1.saveMessage

sendMessageToSomeOne()方法上边添加 如下方法 (用于将三个数据保存到数据库)

(消息发送者、消息接收者、发送的消息)

/**
 * 将聊天消息保存到数据库中
 * @param fromUser  发送方昵称
 * @param toUser    接收方昵称
 * @param content   聊天消息
 */
public void saveMessage(String fromUser,String toUser,String content){
    try ( Connection connection = DBUtil.getConnection(); ){
        String sql = "INSERT INTO chatinfo(content,from_user,to_user) " +
                     "VALUES (?,?,?)";
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setString(1,content);
        ps.setString(2,fromUser);
        ps.setString(3,toUser);
        ps.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

4.2.调用:

 

Server里的ClientHandler类的run方法中循环读取客户端消息的循环中添加调用saveMessage()方法的一行代码。

用于将群聊消息保存到mysql

 

 Server里的ClientHandler类的sendMessageToOne()方法中添加调用saveMessage()方法的一行代码。如下图:

用于将私聊消息保存到mysql

 

 

运行效果:

运行效果和上一版本chat3一样,不过多出了将聊天数据保存到mysql的功能。

 

 

 


                                                                                                                                                                                                                                        By   zhaoyq   2024-05-31