JAVA 访问数据库登录,用这个id通过对话框进行socket通信

直接粘贴源代码了,本来JDBC的DBUtil有点错误,以后用自己的8

DBUtil.java

//DBUtil.java
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DBUtil {
	
	private Connection conn;
	private PreparedStatement preStmt;
	private ResultSet rs;

	public static Connection getConnection() throws SQLException {
		Properties p=new Properties();
		File file=new File("config"+File.separator+"mysql.properties");
		try {
			p.load(new FileInputStream(file));
			String user=p.getProperty("user");
			String password=p.getProperty("password");
			String driver=p.getProperty("driver");
			String url=p.getProperty("url");
			
			Class.forName(driver);
			
			return DriverManager.getConnection(url, user, password);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new SQLException("加载配置文件失败!");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new SQLException("数据库驱动程序未找到!");
		}
		
	}
	
	
	public void closeAll() {
		try {
			if(null!=rs)
				rs.close();
			if(null!=preStmt)
				preStmt.close();
			if(null!=conn)
				conn.close();
			
		}catch(Exception ex) {
			ex.printStackTrace();
		}
	}
	
	public ResultSet executeQuery(String sql, Object...params)throws Exception
	{
		conn=this.getConnection();
		if(null==sql)
			return null;
		
		preStmt=conn.prepareStatement(sql);
		if(null!=params && params.length>0) {
			for(int i=0;i<params.length;i++) {
				preStmt.setObject(i+1, params[i]);
			}
		}
		
		rs=preStmt.executeQuery();
		
		return rs;
	}
	
	public int executeUpdate(String sql, Object...params)throws SQLException
	{
		
		int result=0;
		
		
		
		if(null==sql)
			return 0;
		
		conn=this.getConnection();
		preStmt=conn.prepareStatement(sql);
		
		if(null!=params && params.length>0) {
			for(int i=0;i<params.length;i++) {
				preStmt.setObject(i+1, params[i]);
			}
		}
		
		result=preStmt.executeUpdate();
		
		return result;
	}
	
	
}

mysql.properties 

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/student0010?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&&useSSL=false
user=root
password=123456

user.java

//user.java
public class User {
	
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public User(String username,String password) {
		this.username=username;
		this.password=password;
	}
}

userservice.java

//UserService.java
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserService {
	public User findUserByName(String userName) {
		DBUtil db=new DBUtil();
		User user=null;
		try {
			db.getConnection(); 	//获取数据库连接
			String sql="SELECT * FROM userdetails WHERE username=?";//设置数据库参数
			Object[] param =new Object[] {userName};
			ResultSet rs=db.executeQuery(sql, param);
			if(rs.next()) {		//将结果集中的数据封装到对象中
				user=new User(rs.getString(1),rs.getString(2));
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			db.closeAll();
		}
		
		
		return user;
		
	}
	
	public boolean saveUser(User user) {	//保存用户信息,没有做注册界面,没敲完
		boolean r=false;
		DBUtil db=new DBUtil();
		
		
		return r;
		
	}
}

 LoginFrame.java

//LoginFram.java
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class LoginFrame extends JFrame{
	private JPanel p;
	private JLabel lblName,lblPwd;
	private JTextField txtName;
	private JPasswordField txtPwd;
	private JButton btnOk,btnCancle,btnRegist;
	private static User user;
	private UserService userService;
	public String username;
	
	public LoginFrame() {
		super("登录页面");
		userService=new UserService();
		p=new JPanel();
		p.setLayout(null);
		/*未设置Layout时,java默认为flowLayout布局的,设置为null即为清空布局管理器,
		 * 之后添加组件,常常是设置组件左上角坐标相对于容器左上角(0,0)的x,y值来确定组件的位置,
		 * 即使更改容器大小也不会改变位置。这种方式常常用于窗体大小固定的容器里。
		 */
		lblName=new JLabel("用户名");
		lblPwd=new JLabel("密码");
		txtName=new JTextField(20);
		txtPwd=new JPasswordField(20);
		txtPwd.setEchoChar('*');
		
		btnOk=new JButton("登录");
		btnOk.addActionListener(new LoginListener());
		
		btnCancle=new JButton("重置");
		btnCancle.addActionListener(new ResetListener());
		
		btnRegist=new JButton("注册");
		//注册监听器
		
		/*setBounds(x,y,width,height); 
		 * x:组件在容器X轴上的起点 
		 * y:组件在容器Y轴上的起点 
		 * width:组件的长度
		 * height:组件的高度
		 */
		lblName.setBounds(30,30,60,25);
		lblPwd.setBounds(30,60,60,25);
		txtName.setBounds(95,30,120,25);
		txtPwd.setBounds(95,60,120,25);
		btnOk.setBounds(30,90,60,25);
		btnCancle.setBounds(95,90,60,25);
		btnRegist.setBounds(160,90,60,25);
		
		p.add(lblName);
		p.add(txtName);
		p.add(lblPwd);
		p.add(txtPwd);
		p.add(btnOk);
		p.add(btnCancle);
		p.add(btnRegist);
		
		this.add(p);
		this.setSize(250,170);
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public class LoginListener implements ActionListener{	//监听类,处理登录按钮
		public void actionPerformed(ActionEvent e) {
			user=userService.findUserByName(txtName.getText().trim());
			if(user!=null) {
				if(user.getPassword().equals(new String(txtPwd.getPassword()))) {
					
					LoginFrame.this.setVisible(false);//登录成功,隐藏登录窗口
					username=txtName.getText().trim();
					new ChatClient(username).setVisible(true);//显示聊天窗口
					
				}else {
					System.out.println("密码错误,请重新输入");
					txtPwd.setText("");
				}
				}else {
					System.out.println("该用户不存在,请先注册");
			}
		}
		
	}
	
	public class ResetListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			txtName.setText("");
			txtPwd.setText("");
		}
	}
	
	public static void main(String args[]) {
		new LoginFrame();
		
	}
}

 ChatServer.java

//chatServer.java
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
public class ChatServer {
	public static String username;
	ServerSocket serverSocket;	//声明服务器套接字
	ArrayList<BufferedReader> bReaders=new ArrayList<BufferedReader>();	//输入流列表集合
	ArrayList<PrintWriter> pWriters=new ArrayList<PrintWriter>();	//输出流列表集合
	LinkedList <String>msgList=new LinkedList<String>();	//聊天信息列表集合
	
	public ChatServer() {
		try {
			serverSocket=new ServerSocket(28888);	
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		new AcceptSocketThread().start();	//创建接客户端socket的线程实例并启动
		new SendMsgToClient().start();	//创建给客户端发送信息的线程实例并启动
		System.out.println("服务器已经启动...");
	}
	class AcceptSocketThread extends Thread{
		public void run() {
			while(this.isAlive()) {
				try {
					Socket socket=serverSocket.accept();
					if(socket!=null) {
						BufferedReader bReader=new BufferedReader(	//获取socket对象的输入流
								new InputStreamReader(socket.getInputStream()));
						bReaders.add(bReader);	//将输入流添加到输入流列表集合中
						new GetMsgFromClient(bReader).start();	
						//开启一个线程接收该客户端的聊天信息
						pWriters.add(new PrintWriter(socket.getOutputStream()));
						//获取socket对象的输出流,并添加到输入出流列表集合中
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	class GetMsgFromClient extends Thread{
		BufferedReader bReader;
		public GetMsgFromClient(BufferedReader bReader) {
			this.bReader=bReader;
		}
		public void run() {
			while(this.isAlive()) {
				try {
					String strMsg=bReader.readLine();
					//从输入流中读一行信息
					if(strMsg!=null) {
						SimpleDateFormat dateFormat=new SimpleDateFormat(
								"yyyy-MM-dd HH:mm:ss");
						String strTime=dateFormat.format(new Date());
						msgList.addFirst("<=="+strTime+"==>\n"+strMsg);
						//将时间和信息添加到信息链表集合中
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
	}
	class SendMsgToClient extends Thread{
		public void run() {
			while(this.isAlive()) {
				if(!msgList.isEmpty()) {	//如果信息链表不空,表示还有聊天信息没发送
					String msg=msgList.removeLast();	//取出信息链表最后一条,并移除
					for(int i=0;i<pWriters.size();i++) {	//对输出流列表集合进行遍历,循环发送信息给客户端
						pWriters.get(i).println(msg);
						pWriters.get(i).flush();
					}
				}
			}
		}
	}
	public static void main(String args[]) {
		
		new ChatServer();
	}
}

ChatClient.java

//ChatClient.java
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.*;

public class ChatClient extends JFrame{
	Socket socket;
	public static String username;
	PrintWriter pWriter;
	BufferedReader bReader;
	JPanel panel;
	JScrollPane sPane;
	JTextArea txtContent;
	JLabel lblName,lblSend;
	JTextField txtName,txtSend;
	JButton btnSend;
	
	
	
	public ChatClient(String username) {	//参数username,登录后聊天界面用户名设置
		super("聊天室");
		txtContent=new JTextArea();
		txtContent.setEditable(false);
		sPane=new JScrollPane(txtContent);
		
		lblName=new JLabel("昵称");
		txtName=new JTextField(5);
		lblSend=new JLabel("发言");
		txtSend=new JTextField(20);
		btnSend=new JButton("发送");
		 
		txtName.setText(username);
		
		panel=new JPanel();
		panel.add(lblName);
		panel.add(txtName);
		panel.add(lblSend);
		panel.add(txtSend);
		panel.add(btnSend);
		this.add(panel,BorderLayout.SOUTH);
		
		this.add(sPane);
		this.setSize(500,300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		try {
			socket=new Socket("127.0.0.1",28888);	//创建套接字
			pWriter=new PrintWriter(socket.getOutputStream());
			bReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		btnSend.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				String strName=txtName.getText();
				String strMsg=txtSend.getText();
				if(!strMsg.equals("")) {
					pWriter.println(strName+"说"+strMsg);
					pWriter.flush();
					txtSend.setText("");
				}
			}
		});
		new GetMsgFromServer().start();
		
	}
	
	class GetMsgFromServer extends Thread {
		public void run() {
			while(this.isAlive()) {
				try {
					String strMsg=bReader.readLine();
					if(strMsg!=null) {
						txtContent.append(strMsg+"\n");	//文本域添加聊天信息
					}
					Thread.sleep(50);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
	}
	
	public static void main(String args[]) {
		new ChatClient(username).setVisible(true);
	}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值