“` UserDaoImpl.java package com.FakeQQ.user.dao;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List;
import com.FakeQQ.entity.User; import com.FakeQQ.util.ConnectionUtil;
public class UserDaoImpl {
public User getUser(int qqNum){ User u = new User(); try{ //获取数据库连接 Connection con=ConnectionUtil.getCon(); //创建statement PreparedStatement pstm=con.prepareStatement( "select * from user u where u.qqNumber=?"); //设置参数,针对?占位符 pstm.setInt(1, qqNum); //执行sql语句 ResultSet rs=pstm.executeQuery(); if(rs.next()) { System.out.println(rs.getInt(1)); u.setQqNumber(rs.getInt(1)); System.out.println(rs.getString(2)); u.setQqName(rs.getString(2)); u.setQqPassword(rs.getString(3)); u.setRegistTime(rs.getDate(4)); u.setSex(rs.getString(5)); u.setIntroduce(rs.getString(6)); u.setIp(rs.getString(7)); } //关闭连接 ConnectionUtil.closeCon(rs, pstm, con); return u; }catch(Exception e){ e.printStackTrace(); return null; } } //用户注册 public boolean saveUser(User u) { try { //1,加载驱动类 Class.forName("com.mysql.jdbc.Driver"); //2.获取数据库连接 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myqq_db","root",""); //3.数据库实际操作 PreparedStatement pstm = con.prepareStatement( "insert into user(qqName,qqPassword, registTime,sex,introduce,ip)" + " values(?,?,?,?,?,?)" ); pstm.setString(1, u.getQqName()); pstm.setString(2, u.getQqPassword()); pstm.setString(3, u.getRegistTime().toLocaleString()); pstm.setString(4, u.getSex()); pstm.setString(5, u.getIntroduce()); pstm.setString(6,u.getIp()); int count = pstm.executeUpdate(); // 插入之后做更新数据 pstm.close(); con.close(); if (count >0) return true; else return false; } catch (Exception e) { e.printStackTrace(); } return false; } // 找到某一账户,返回这个账户的所有资料 public User findByNameAndPassword(int qqNumber,String password) { User u = new User(); try { //1,加载驱动类 Class.forName("com.mysql.jdbc.Driver"); //2.获取数据库连接 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myqq_db","root",""); //3.数据库具体操作 PreparedStatement pstm = con.prepareStatement( "select * from user u where u.qqNumber = ? and u.qqPassword = ? " ); pstm.setInt(1,qqNumber); pstm.setString(2, password); ResultSet rs = pstm.executeQuery(); //查找之后返回集合 if(rs.next()) { u.setQqNumber(rs.getInt(1)); u.setQqName(rs.getString(2)); u.setQqPassword(rs.getString(3)); u.setRegistTime(rs.getDate(4)); u.setSex(rs.getString(5)); u.setIntroduce(rs.getString(6)); u.setIp(rs.getString(7)); } pstm.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } return u; } // 通过qq号查找所有好友(默认数据库所有用户都是好友) public List <User> findAllFriends(int qqNumber) { ResultSet rs=null; PreparedStatement pstm = null; Connection con = null; List <User> list = new ArrayList <User>(); try { con = ConnectionUtil.getCon(); pstm = con.prepareStatement( "select * from user u where u.qqNumber<>?" ); pstm.setInt(1, qqNumber); rs = pstm.executeQuery(); while(rs.next()) { User u = new User(); u.setQqNumber(rs.getInt(1)); u.setQqName(rs.getString(2)); u.setQqPassword(rs.getString(3)); u.setRegistTime(rs.getDate(4)); u.setSex(rs.getString(5)); u.setIntroduce(rs.getString(6)); u.setIp(rs.getString(7)); list.add(u); } return list; } catch (Exception e) { e.printStackTrace(); return null; }finally { ConnectionUtil.closeCon(rs,pstm,con); } } // 对特定的QQ号做密码重置 public boolean updatePassword(int qqNumber,String qqPassword) { ResultSet rs=null; PreparedStatement pstm = null; Connection con = null; try { con = ConnectionUtil.getCon(); pstm = con.prepareStatement( "update user set qqPassword=? where qqNumber=?" ); pstm.setString(1,qqPassword); pstm.setInt(2, qqNumber); int count = pstm.executeUpdate(); if(count>0) { return true; } } catch (Exception e) { return false; }finally { ConnectionUtil.closeCon(rs,pstm,con); } return false; } // 登录成功后修改IP地址 public void updateIp(int qqNum,String qqIp) { ResultSet rs=null; PreparedStatement pstm = null; Connection con = null; try { con = ConnectionUtil.getCon(); pstm = con.prepareStatement( "update user set ip=? where qqNumber=?" ); pstm.setString(1,qqIp); pstm.setInt(2, qqNum); int count = pstm.executeUpdate(); } catch (Exception e) { }finally { ConnectionUtil.closeCon(rs,pstm,con); } }}
UserServiceImpl.java package com.FakeQQ.user.service;
import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Date; import java.util.List;
import com.FakeQQ.entity.User; import com.FakeQQ.user.dao.UserDaoImpl;
public class UserServiceImpl { // 用户注册 public boolean regist(User u) { u.setRegistTime(new Date()); UserDaoImpl userDaoImpl = new UserDaoImpl(); return userDaoImpl.saveUser(u); }
// 查找 好友 public List<User> listFriends(int qqNumber) { UserDaoImpl userDaoImpl = new UserDaoImpl(); return userDaoImpl.findAllFriends(qqNumber); } // 用户登录 // 通过qq号码和密码查找 某一用户 public User login(int qqNum, String password){ UserDaoImpl userDaoImpl=new UserDaoImpl(); User u = userDaoImpl.findByNameAndPassword(qqNum, password); if(u!=null) { // 获得 本地 IP try { String ip = InetAddress.getLocalHost().toString(); // 修改 数据库 IP userDaoImpl.updateIp(qqNum, ip); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return u; } public User listByQqNum(int qqNum){ UserDaoImpl userDaoImpl=new UserDaoImpl(); return userDaoImpl.getUser(qqNum); }}
BtnLoginListener.java
// QQ登录监听函数
package com.FakeQQ.user.view;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import com.FakeQQ.entity.User; import com.FakeQQ.user.service.UserServiceImpl;
public class BtnLoginListener implements ActionListener{
LoginFrame loginFrame; public BtnLoginListener(LoginFrame loginFrame) { this.loginFrame = loginFrame; } public void actionPerformed(ActionEvent e){ String values = e.getActionCommand(); if(values.equals("确定")) { String qqNum = loginFrame.txtqqNum.getText(); String password = new String (loginFrame.txtPassword.getPassword()); UserServiceImpl userServiceImpl = new UserServiceImpl(); User user = new User(); user = userServiceImpl.login(Integer.parseInt(qqNum),password); if(user!=null) { //System.out.println("登录成功!"); // new JTree loginFrame.dispose(); loginFrame=null; MainFrame mainFrame = new MainFrame(user); } }else if(values.equals("取消")) { System.exit(0); } }}
BtnResigerListener.java package com.FakeQQ.user.view;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import com.FakeQQ.entity.User; import com.FakeQQ.user.service.UserServiceImpl;
public class BtnResigerListener implements ActionListener { private ResigerFrame resigerframe = null;
public BtnResigerListener(ResigerFrame resigerframe) { this.resigerframe = resigerframe; } public void actionPerformed(ActionEvent e) { User user = new User(); String qqName = resigerframe.txtqqName.getText(); String sex = resigerframe.txtSex.getText(); String qqNum = resigerframe.txtqqNum.getText(); String password = new String (resigerframe.txtPassword.getPassword()); String introduce = resigerframe.txtIntroduce.getText(); user.setQqName(qqName); user.setSex(sex);// user.setQqNumber(Integer.parseInt(qqNum)); user.setQqPassword(password); user.setIntroduce(introduce); UserServiceImpl userServiceImpl = new UserServiceImpl(); boolean flag = userServiceImpl.regist(user); if(flag==true) { // System.out.println(“注册成功!”);
} }}
LoginFrame.java
“`package com.FakeQQ.user.view;
import java.awt.Dimension; import java.awt.Toolkit;
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPasswordField; import javax.swing.JTextField;
public class LoginFrame extends JFrame { JLabel lblqqNum; JLabel lblqqPassword; JTextField txtqqNum; JPasswordField txtPassword; JButton btnLogin; JButton btnCancle; JButton btnResiger;
// 构造方法 public LoginFrame() { lblqqNum = new JLabel("QQ号"); lblqqPassword = new JLabel("密码:"); txtqqNum = new JTextField(); txtPassword = new JPasswordField(""); btnLogin = new JButton("确定"); btnCancle = new JButton("取消"); btnResiger = new JButton("QQ注册"); this.getContentPane().setLayout(null); //布局为自己 this.getContentPane().add(lblqqNum); lblqqNum.setBounds(20,20,80,20); this.getContentPane().add(lblqqPassword); lblqqPassword.setBounds(20,50,80,20); this.getContentPane().add(txtqqNum); txtqqNum.setBounds(70,20,140,20); this.getContentPane().add(txtPassword); txtPassword.setBounds(70,50,140,20); this.getContentPane().add(btnLogin); btnLogin.setBounds(60,80,80,20); this.getContentPane().add(btnCancle); btnCancle.setBounds(160,80,80,20); this.getContentPane().add(btnResiger); btnResiger.setBounds(100,130,90,20); BtnLoginListener btnLoginListener = new BtnLoginListener(this); btnLogin.addActionListener(btnLoginListener); //事件源和事件者关联起来 btnCancle.addActionListener(btnLoginListener); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口的时候退出应用程序 //设置窗口居中显示 //定义一个工具包 Toolkit kit = Toolkit.getDefaultToolkit();//获得屏幕大小尺寸 Dimension screenSize = kit.getScreenSize(); int screenWidth = screenSize.width;//获得屏幕宽度 int screenHeight = screenSize.height;//获得屏幕高度; int i = this.getWidth();//获得当前窗体的宽度 int j = this.getHeight();//获得当前窗体的高度 this.setLocation((screenWidth-i)/2, (screenHeight-j)/2); this.setTitle("QQ登录"); this.setSize(300,200); this.setVisible(true); // 可见 }}
MainFrame.java package com.FakeQQ.user.view;
import java.util.HashMap; import java.util.List;
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeSelectionModel;
import com.FakeQQ.Message.service.ServerThread; import com.FakeQQ.Message.view.MessageFrame; import com.FakeQQ.entity.User; import com.FakeQQ.user.dao.UserDaoImpl; import com.FakeQQ.user.service.UserServiceImpl;
public class MainFrame extends JFrame{ public User myself; public List friends; public HashMap