java聊天室案例改进(建立与数据库的连接)
前言:
本篇博客在之前的聊天案例上加入了与数据库连接,将用户的账户和密码存储在数据库中,
登录时验证用户是否创建账户,注册时验证用户是否创建已有账户
如果需要完整代码的同学,后台私信博主
聊天案例完整代码链接如下:
https://blog.csdn.net/Vaclee/article/details/146240268?spm=1001.2014.3001.5501
目录
一.在数据库中创建一个chatdb数据库和user_student表
二.将数据库驱动导入项目中
1.在项目中创建一个文件夹
2.将驱动导入lib文件中
3.将sql驱动导入到项目中
4.建立与数据库的连接
三.注册页面加入数据库
四.在登录页面加入数据库验证
一.在数据库中创建一个chatdb数据库和user_student表
注意账户是不能重复的,应该加入相应的约束
代码如下:
create database if not exists chatdb charset utf8create table user_student(id int primary key auto_increment,account varchar(10) not null unique,password varchar(10) not null,regtime date not null
)
二.将数据库驱动导入项目中
博主这里用的是mysql,有需要驱动的同学可以私信博主
1.在项目中创建一个文件夹
2.将驱动导入lib文件中
将驱动文件拖入lib中即可
3.将sql驱动导入到项目中
4.建立与数据库的连接
由于我们每次使用数据库都需要建立与数据库的链接,所以可以将与数据库连接的代码封装成一个类,提高代码的复用性
这里需要注意的是java与数据库连接遵循的是TCP协议,所以说ip和端口,时区都不能写错,否则会连接失败
public class JdbcUtil {//对数据库连接进行封装,符合面向对象语言的特性,增加代码的复用性private static String url = "jdbc:mysql://127.0.01:3306/schooldb? serverTimezone=Asia/Shanghai";//jdbc:数据库://ip:端口/具体的数据库名?时区private static String user = "root";//数据库账户private static String dbpwd = "root";//数据库密码public static Connection getconnection()throws SQLException {Connection connection = DriverManager.getConnection(url,user,dbpwd);return connection;}
}
三.注册页面加入数据库
1.首先对注册按钮加入事件
2.建立与数据库连接
3.获取文本框内容
4.查询账户是否在已经存在,如果存在提醒用户直接登录,如果不存在添加到数据库中
button1.addActionListener(new AbstractAction(){@Overridepublic void actionPerformed(ActionEvent e){try {String account = textField1.getText();//获取文本框内容String password = textField2.getText();//连接数据库Connection connection = JDBCutil.getconnection();//首先查询是否已经有改账户PreparedStatement p = connection.prepareStatement("select id from user_student where account = ?");p.setObject(1, account);ResultSet resultSet = p.executeQuery();if (resultSet.next() == false) {p = connection.prepareStatement("insert into user_student(account,password,regtime)value(?,?,?)");p.setObject(1, account);p.setObject(2, password);p.setObject(3, new Date());p.executeUpdate();JOptionPane.showMessageDialog(null, "注册成功", "来自系统的提示", JOptionPane.WARNING_MESSAGE);new LoginFrame();} else {JOptionPane.showMessageDialog(null, "账户已经存在请直接登录", "来自系统的提示", JOptionPane.WARNING_MESSAGE);return;}p.close();resultSet.close();connection.close();}catch(SQLException k){System.out.println("数据库连接失败");k.printStackTrace();}}
});
四.在登录页面加入数据库验证
1.首先对注册按钮加入事件
2.建立与数据库连接
3.获取文本框内容
4.查询账户是否在已经存在,如果存在判断密码是否正确,如果正确直接登录,否则提醒用户密码错误,如果不存在提醒用户注册
loginbtn.addActionListener(new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {//事件监听try {String account = accountFiled.getText();//获取文本框内容String password = passwordFiled.getText();if (password.equals("")) {JOptionPane.showMessageDialog(null, "密码不能为空", "来自系统的提示", JOptionPane.WARNING_MESSAGE);return;}if (account.equals("")) {JOptionPane.showMessageDialog(null, "账户不能为空", "来自系统的提示", JOptionPane.WARNING_MESSAGE);//(,内容,标题,警告类型);return;}//连接数据库Connection connection = JDBCutil.getconnection();//首先查询是否已经有改账户PreparedStatement p = connection.prepareStatement("select id from user_student where account = ?");p.setObject(1,account);ResultSet resultSet = p.executeQuery();if(resultSet.next()==false){JOptionPane.showMessageDialog(null, "账户不存在请注册!", "来自系统的提示", JOptionPane.WARNING_MESSAGE);//(,内容,标题,警告类型);return;}else{p = connection.prepareStatement("select id from user_student where account = ? and password = ?");p.setObject(1,account);p.setObject(2,password);ResultSet resultSet1 = p.executeQuery();if (resultSet1.next()==false){JOptionPane.showMessageDialog(null, "密码错误,请重新输入", "来自系统的提示", JOptionPane.WARNING_MESSAGE);//(,内容,标题,警告类型);return;}}p.close();resultSet.close();connection.close();//连接服务器端Socket socket = new Socket("127.0.0.1", 9999);dispose();//释放关闭当前窗口new ChatFrame(accountFiled.getText(),socket).setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}catch(IOException ex){ex.printStackTrace();JOptionPane.showMessageDialog(null,"网络连接失败!","来自系统的提示",JOptionPane.WARNING_MESSAGE);}catch(Exception ex){ex.printStackTrace();//打印异常信息JOptionPane.showMessageDialog(null,"系统忙,请稍后再试!","来自系统的提示",JOptionPane.WARNING_MESSAGE);}}
});