问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用Java快速实现一个最简单的MySQL代理呢?

发布网友 发布时间:2022-04-10 07:55

我来回答

2个回答

懂视网 时间:2022-04-10 12:16

 

Mysql 数据库 day01

一、数据库
1、存储数据
2、MySQL、oracle、sql server、db2、sqlite...
3、关系型数据库:数据以表格形式存放
4、No sql

二、Mysql
1、开源免费的数据库
2、在互联网领域是最常用的数据库
3、被sun公司以10亿美金收购,一年后,sun被oracle收购
4、MySQL被oracle收购后,存在闭源风险
5、目前各大开开源社区,已经不在支持MySQL
6、MySQL的创始人,继续开发一个MySQL的分支版本,mariadb
7、开源社区都转向支持mariadb的开发
8、阿里巴巴把自己开发的数据库新功能免费贡献给mariadb

三、下载安装MySQL
1、MySQL有收费版本和免费开源的社区版本
2、下载在开源社区版
3、安装MySQL或mariadb都可以

四、MySQL的使用
1、MySQL数据库服务,是一个后台进程
2、使用客户端连接MySQL
(1)MySQL命令行客户端:mysql
mysql -u 用户名 -p -hxxx.xxx.xxx.xx -p3306(默认端口)
(2)MySQL官方客户端有:workbench navicat、sqlyog、mysqlfront

五、MySQL命令行客户端
1、连接、登录MySQL服务器
mysql -u root -p 登录本机服务器,以root用户

2、退出客户端、断开与服务器的连接
(1)exit
(2)q

3、显示数据库列表
(1)show databases;
(2)show schemas;

4、进入数据库
use 库名;

5、查看数据库中数据表的列表
show tables;

6、MySQL用户操作:MySQL用户由”用户名+ip地址“来标识
(1)创建用户
create user‘用户名‘@‘xxx.xxx.xxx.xx‘ identified by ‘密码‘
例如:create user‘root1‘@‘192.168.121.%‘ identified by ‘1234‘
(2)对用户授权
grant all privileges on *.* to ‘用户名‘@‘xxx.xxx.xxx.xxx‘
例如:grant all privileges *.* to ‘root1‘@‘192.168.121.%‘
(3)用户表
use mysql; 进入mysql库
select * from user; 查看系统用户表数据
select * from userG; 纵向查看结果
(4)删除用户
drop user ‘用户名‘@‘主机地址‘

7、库管理
(1)创建库
create database 库名 charset=utf8;
(2)查看库
a.show database;
b.show schemas;
(3)修改库:对数据库只能修改它的默认字符编码
alter database 库名 charset xx;
(4)删除库:删除数据库,会把内容所有数据表全部删除,且不可恢复
drop database 库名;

8、数据表
(1)创建表
create table 表名(
id int,
name varchar(20),
moeny decimal(8,2)
)engine=innodb charset=utf8;
(2)查看表
a.show tables;
b.desc 表名; 显示表中纵向信息
c.show create table 表名G;
(3)删除表:删除表不可恢复
drop table 表名;
(4)截断表(重建表):先删除,再重建,数据不恢复
truncate table 表名;

9、修改表
(1)修改表名
rename table 表名(1) to 表名2;
(2)修改表的参数(引擎、编码)
alter table 表名 engine=xxx charset=xxx;
(3)添加字段
a.first -添加到最前面
b.after -添加到哪个字段之后
例如:
alter table tb2 add gender varchar(20) first;
alter table tb2 add height int after name;
alter table tb2 add (weight int,tel varchar(20));
(4)修改字段名
alter table tb2 change gender sex varchar(4);
(5)修改字段类型
alter table tb2 modify height decimal(3,2);
(6)修改字段位置
alter table tb2 modify height decimal(3,2) after name;
alter table tb2 modify name varchar(20) first;
(7)删除字段:整列数据会被删除,不可恢复
alter table tb2 drop column weight;

10、注意
字段字节量总和,不超过65535个字节。
varchar类型:如果长度小于等于255,前面有一个字节,表示字节长度;
如果长度大于255,前面有两个字节,表示字节长度。
如果表中字段,只要有允许null值的字段,那么久需要有额外的一个字节来表示。
(1)create table tb3(
id int, --4字节
price double, --8字节
name varchar(65520) --65520+2
)charset=latin1;

(2)create table tb3(
id int not null, --4字节
price double not null, --8字节
name varchar(65521) not null --65521+2
)charset=latin1;

(3)create table tb3(
id int not null, --4字节
price double not null, --8字节
s tinyint not null, --1字节
name varchar(21840) not null --21840*3+2
)charset=utf8;

11、sql
(1)结构化的查询语言
(2)用来访问数据库
(3)DDL 数据定义语言,建库建表
(4)DML 数据操作语言,增删改
(5)DQL 数据查询语言,select

12、insert 插入数据
insert into 表名 values(值1,值2)

13、update 修改数据
update 表名 set 字段1=值,字段2=值,字段3=值 where ......

14、delete 删除
delete from 表名 where ......

15、select查询
(1)select * from 表名
(2)select 字段1,字段2,字段3 from 表名

16、数据库存储引擎
(1)innodb
a.默认推荐引擎
b.支持事务
c.支持外键
d.提供行级锁
e.表文件:tb1.frm 保存表结构
tb1.ibd 保存数据、索引
(2)myisam
a.不支持事务
b.不支持外键
c.数据访问效率更高
d.只提供表级锁
e.表文件:tb2.frm 保存表结构
tb2.MYD 保存数据
tb2.MYI 保存索引数据
(3)memory 内存表
......

【java】java学习之路-03-MySQL(一)

标签:acl   地址   建库   varchar   trunc   官方   端口   memory   字段   

热心网友 时间:2022-04-10 09:24

首先,准备开发工具套件,我们并不会引入过多工具包,仅仅需要:

Java8

Vert.x 3
如果你是用Maven做为项目管理工具,请将Vert.x 3引入:
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId><version>3.3.2</version>
</dependency>
代码实现:
package com.maxleap.mysqlproxy;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.logging.Logger;
import io.vertx.core.logging.LoggerFactory;
import io.vertx.core.net.NetClient;
import io.vertx.core.net.NetServer;
import io.vertx.core.net.NetSocket;

/**
* @author sneaky
* @since 1.0.0
*/
public class MysqlProxyServer {
private static final Logger logger = LoggerFactory.getLogger(MysqlProxyServer.class);

public static void main(String[] args) {
Vertx.vertx().deployVerticle(new MysqlProxyServerVerticle());
}

public static class MysqlProxyServerVerticle extends AbstractVerticle {
private final int port = 3306;
private final String mysqlHost = "10.10.0.6";
@Override
public void start() throws Exception {
NetServer netServer = vertx.createNetServer();//创建代理服务器
NetClient netClient = vertx.createNetClient();//创建连接mysql客户端
netServer.connectHandler(socket -> netClient.connect(port, mysqlHost, result -> {
//响应来自客户端的连接请求,成功之后,在建立一个与目标mysql服务器的连接
if (result.succeeded()) {
//与目标mysql服务器成功连接连接之后,创造一个MysqlProxyConnection对象,并执行代理方法
new MysqlProxyConnection(socket, result.result()).proxy();
} else {
logger.error(result.cause().getMessage(), result.cause());
socket.close();
}
})).listen(port, listenResult -> {//代理服务器的监听端口
if (listenResult.succeeded()) {
//成功启动代理服务器
logger.info("Mysql proxy server start up.");
} else {
//启动代理服务器失败
logger.error("Mysql proxy exit. because: " + listenResult.cause().getMessage(), listenResult.cause());
System.exit(1);
}
});
}
}

public static class MysqlProxyConnection {
private final NetSocket clientSocket;
private final NetSocket serverSocket;

public MysqlProxyConnection(NetSocket clientSocket, NetSocket serverSocket) {
this.clientSocket = clientSocket;
this.serverSocket = serverSocket;
}

private void proxy() {
//当代理与mysql服务器连接关闭时,关闭client与代理的连接
serverSocket.closeHandler(v -> clientSocket.close());
//反之亦然
clientSocket.closeHandler(v -> serverSocket.close());
//不管那端的连接出现异常时,关闭两端的连接
serverSocket.exceptionHandler(e -> {
logger.error(e.getMessage(), e);
close();
});
clientSocket.exceptionHandler(e -> {
logger.error(e.getMessage(), e);
close();
});
//当收到来自客户端的数据包时,转发给mysql目标服务器
clientSocket.handler(buffer -> serverSocket.write(buffer));
//当收到来自mysql目标服务器的数据包时,转发给客户端
serverSocket.handler(buffer -> clientSocket.write(buffer));
}

private void close() {
clientSocket.close();
serverSocket.close();
}
}
}

测试一下
try {
Class.forName(name);//指定连接类型
Connection conn = DriverManager.getConnection(url, user, password);//url为代理服务器的地址
PreparedStatement pst = conn.prepareStatement("select * from test;");//准备执行语句
ResultSet resultSet = pst.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getLong(1) + ": " + resultSet.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华丽转身为什么在优酷看不了了之 《华丽转身:爱情不在服务区》txt全集下载 翡翠台华丽转身英文曲 matplotlib中plt.imshow函数画图出现的颜色问题 数字图像处理(c++ opencv):形态学图像处理-提取连通域 ...opencv做东西,网上的程序读着还可以,程序遇到问题不会改,一些函_百... 深度学习面试问题总结 | 传统图像处理——OpenCV 活虾如何在晚上保持存活状态进行保存? neu代表什么意思 民办学校和私立学校的区别是什么民办学校和私立学校的区别 如果要是在银行存或取100万,也需要在大厅排队,然后再窗口进行办理吗? 把好友删除 没有 只有转账记录 怎么加回来 100万打入个人账户需要预留24小时才可以取吗? 影视剧中出现的“姬”是干什么的?和小妾相比哪个更低微? 古代姬妾都是什么地位,姬和妾一样吗? 有没有隔壁老樊的《姬和不如》百度云 手机内存无缘无故的消失。请问原因 手机内存文件为什么老是莫名其妙的不见了 借了很多网贷逾期了,对以后买房办理房贷有影响吗 想换个网名能代表生活重新开始的意思 找寻一个新的网名 一个新的开始 一个喜欢黑夜的人 迷失在黑夜中 我的名字里面有个新,求大神帮帮忙起个合适的网名 好听的正能量一切看淡重新开始四个字的昵称? 开始一段新的旅程,抛掉过去,像新的开始加油,的网名 带新的网名 我想起个关于新的开始的网名 谁能帮我想一个能代表重新开始,从起点开始的网名!谢谢了! 求一个能表示新的开始的好听的女生网名 想起个人生重新开始的网名 农村宅基地自建房*说只要办理了抵押登记和他项权证就是合法抵押正确吗?_百度问一问 小超市取名? 怎样给超市取名 怎么给超市起名 梦见女鬼抱着我不放是什么意思 没有驾照能不能买车? 开山王水箱上管接头漏水可以用什么办法弄好?有网友知道吗? 昨晚梦到一个很漂亮的女鬼和一个可爱的小鬼,跟我一起玩。被别人发现后还依依不舍的抱着小鬼走了!什么意 没有拿到驾照,能买车吗? 没有驾照可以买车吗?? 我有时候会梦到穿白衣的女鬼,感觉很阴冷,她有时候抱着我这是怎么回事呀 轿车水箱上面渗水怎么办? 汽车水箱下面的管子接口难道漏水吗怎么看到有一摊水一样的在下面? 梦见漂亮女鬼盯着我和梦中的帅男友看,帅男友意识到紧紧把我抱着 无法注册DLL/OCX:DLLRegisterServer失败!代码0x8002801C 客户端Activex控件注册缺少DLL怎么办 安装邮政储蓄网上银行控件的时候,系统提示PowerEnterPSBC.ocx不能注册dll&#47;ocx:regsvr32失败退出代码0X3 适合双鱼座的香水,双鱼座适合什么香水 咩香水适合十二星座? 如果可以你会给十二星座配什么香水? 十二星座每个女孩身上都有一种什么味?