英语渣渣学Java的day4

17 篇文章 0 订阅
4 篇文章 0 订阅

TCP客户端并发登录

要求: 客户端通过键盘录入用户名。服务端对这个用户名进行校验。 如果该用户存在,在服务端显示xxx,已登陆。并在客户端显示
xxx,欢迎光临。 如果该用户存在,在服务端显示xxx,尝试登陆。并在客户端显示 xxx,该用户不存在。最多就登录三次。

服务端

package com.gec.work3;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

class UserThread implements Runnable{
	private Socket s;
	
	public UserThread(Socket s) {
		this.s = s;
	}

	@Override
	public void run() {
		//获取ip
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip + "....连接进来");
		
		try {
			int i = 0;
			while((i++) <= 2) {
				
				//获得客户端写的用户名
				BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
				
				//接收客户端名字
				String name = bufin.readLine();
				if(name == null) {
					break;
				}
				BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
				//打印流   这是往客户端响应内容 
				PrintWriter out = new PrintWriter(s.getOutputStream(),true);
				String line = null;//因为这个变量是可以作为两种情况
				boolean flag = false;
				while((line = bufr.readLine()) != null) {
					//line是读取txt的名字
					if(line.equals(name)) {
						flag = true;//有这个人
						break;
					}
				}
				
				if(flag) {
					System.out.println(name+",已登录");
					out.println(name + ",欢迎光临");
				}else {
					System.out.println(name + ",尝试登录");
					out.println(name + ",用户名不存在");
				}
			}
			
			s.close();
		} catch (Exception e) {
			System.out.println(e.getMessage());
			throw new RuntimeException("校验失败");
		}
	}
	
}

public class EnterServer {
	public static void main(String[] args) throws IOException {
		//服务端套接字
		ServerSocket ss = new ServerSocket(8888);
		
		while(true) {
			Socket s = ss.accept();
			new Thread(new UserThread(s)).start();
		}
	}
}

客户端


package com.gec.work3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class EnterClient {
	public static void main(String[] args) throws IOException {
		//客户端套接字
		Socket s = new Socket("127.0.0.1",8888);
		
		//带缓冲的reader   获得键盘输入
		BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
		//printwriter    往服务端写内容
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		
		//s.getInputStream() 获得服务端的响应
		BufferedReader bufi = new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		//循环
		for(int i = 0;i < 3;i++) {
			System.out.println("请您输入用户名:");
			String line = bufr.readLine();
			
			if(line == null) {
				break;
			}
			out.println(line);//打印服务端响应的内容
			
			String info = bufi.readLine();
			System.out.println("info:" + info);
			if(info.contains("欢迎")) {
				break;
			}
		}
		bufr.close();
		s.close();
		
		
	}
}

效果图
在这里插入图片描述
注意:user.txt的编码要和eclipse的设置编码保持一致,重要的事情说三遍。

数据库

数据库的概念
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。(文件系统)

数据库管理系统(DataBase Management
System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。

数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。

数据库:存储、维护和管理数据的集合。

在这里插入图片描述

数据库的分类

  1. Mysql(重点)
  2. Oracle(重点)
  3. Sql Server(了解)
  4. DB2
  5. PostgreSQL
  6. Sybase(电信系统)

数据库的安装

基本步骤 a)下载Mysql数据库软件 https://www.mysql.com/ b)安装Mysql * 安装 * 参照图解
* 一路下一步

  • 配置 * 参照图解 * 到选择字符集时停

登录Mysql: mysql -u root -p

  • 卸载
    1.停止mysql服务 net stop mysql 启动mysql服务 net start mysql
    2.卸载mysql
    3.找到mysql 安装目录下的 my.ini datadir=“C:/ProgramData/MySQL/MySQL Server 5.5/Data/”

  • 修改密码 运行cmd * 安装成功了打开cmd --> mysql -uroot -p你的密码 * 修改mysql
    root用户密码 1) 停止mysql服务 运行输入services.msc 停止mysql服务
    或者 cmd --> net stop mysql 2) 在cmd下 输入 mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口) 3) 新打开cmd 输入mysql -u root -p 不需要密码 use mysql; update user set password=password(‘abc’) WHERE User=‘root’; 4) 关闭两个cmd窗口 在任务管理器结束mysqld 进程 5) 在服务管理页面
    重启mysql 服务 密码修改完成

数据库其它知识点介绍

.数据库软件、数据库、表的关系

  1. 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  2. 为保存应用中实体的数据,一般会在数据库创建 多个表,以保存程序中实体的数据。
  3. 数据库服务器、数据库和表的关系如图所示:
    在这里插入图片描述
    数据在数据库中的存储方式
    在这里插入图片描述

如何操作数据库

数据库管理系统可以通过SQL(结构化查询语言)来定义和操作数据,维护数据的完整性和安全性,以及进行各种数据库的管理等。

常用命令

mysql>show databases; 显示所有表

mysql>use mysql; 切换到表mysql

mysql>show tables; 显示表的结构

mysql>drop database 库名;删除数据库

mysql>drop table 表名;删除表

mysql>exit;退出mysql

cmd

C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql -uroot -p Enter
password: **** Welcome to the MySQL monitor. Commands end with ; or
\g. Your MySQL connection id is 4 Server version: 5.7.21-log MySQL
Community Server (GPL)

Copyright © 2000, 2018, Oracle and/or its affiliates. All rights
reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input
statement.

mysql> show databases;
±-------------------+ | Database |
±-------------------+ | information_schema | | mysql | | performance_schema | | sys |
±-------------------+ 4 rows in set (0.00 sec)

mysql> create database g2148; Query OK, 1 row affected (0.00 sec)

mysql> show databases;
±-------------------+ | Database |
±-------------------+ | information_schema | | g2148 | | mysql | | performance_schema | | sys |
±-------------------+ 5 rows in set (0.00 sec)

mysql> use g2148; Database changed mysql> drop database g2148; Query
OK, 0 rows affected (0.00 sec)

mysql> show databases;
±-------------------+ | Database |
±-------------------+ | information_schema | | mysql | | performance_schema | | sys |
±-------------------+ 4 rows in set (0.00 sec)

mysql> create database g2148; Query OK, 1 row affected (0.00 sec)

mysql> use g2148; Database changed mysql> create table t_user(id
int,name varchar(30)); Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
±----------------+ | Tables_in_g2148 |
±----------------+ | t_user |
±----------------+ 1 row in set (0.00 sec)

mysql> drop table t_user; Query OK, 0 rows affected (0.01 sec)

mysql> show tables; Empty set (0.00 sec)

查询表中数据

基本查询

#先创建数据库 CREATE DATABASE hrm;

#1.查询性别为男,并且年龄为20的学生记录
SELECT * FROM employees WHERE sex=‘male’ AND age = 20;

#2.查询员工id是101或者名字是Neena的记录
SELECT * FROM employees WHERE employee_id = 101 OR first_name = ‘Neena’;

#3.查询员工id是101,102,103的记录 and && 左右两个都要为真 or 左为真或右为真

SELECT * FROM employees WHERE employee_id = 101 OR employee_id = 102 OR employee_id = 103; SELECT * FROM employees WHERE employee_id IN(101,102,103);

#4.查询姓名为null的记录
SELECT * FROM employees WHERE first_name IS NULL;

#5.查询姓名不为null的员工记录
SELECT * FROM employees WHERE first_name IS NOT NULL;

#6.查询年龄在20-23之间的学生记录
SELECT * FROM employees WHERE age BETWEEN 20 AND 23; SELECT * FROM employees WHERE age >= 20 AND age <=23;

#7.查询性别非男的员工记录
SELECT * FROM employees WHERE sex = ‘female’;

#修改语句
UPDATE employees SET sex = ‘male’; UPDATE employees SET age = 23;

模糊查询和分页查询
#模糊查询

like ‘%li’ 结尾的员工

SELECT * FROM employees WHERE first_name LIKE ‘%li’

#以 Va开头的员工信息
SELECT * FROM employees WHERE first_name LIKE ‘Va%’;

SELECT * FROM employees WHERE first_name LIKE ‘%o%’

#通配符 _
SELECT * FROM employees WHERE first_name LIKE ‘_o%’

#分页
SELECT COUNT(0) FROM employees;

#每页显示10条 107/10 = 10…7 11页
#查询第一页数据 当前页码是1 (1-1)*10
SELECT * FROM employees LIMIT 0,10

#第二页 (2-1)*10 10
SELECT * FROM employees LIMIT 10,10

#第三页 (3-1)*10
SELECT * FROM employees LIMIT 20,10

#第十一页 (11-1)*10
SELECT * FROM employees LIMIT 100,10

还想了解更多请点击下面链接
Mysql安装资源:
https://download.csdn.net/download/weixin_45523942/21015683

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉莫的羔羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值