我的世界怎么吧mysql数据库教程改成认默
来源:蜘蛛抓取(WebSpider)
时间:2018-06-16 10:15
标签:
mysql数据库教程
众所周知MySQL比用SQLite等存储方式具有體积更小、速度快等优点,下面我就为大家带来插件使用MySQL的教程
本教程所有代码采用GPLv3协议开源
教程目标:实现一个插件使得创建一个表,包含一个int类型数据和一个最大长度为50的字符串数据
Main —— 插件的主类
|
|
至此我们已经学习完毕所有关于MySQL的
的内容了,编写一款MySQL插件应该不難了
不过,我还是推荐大家学习一下附录的内容这部分内容不是必须掌握的,但是可以帮助理解上文提到的部分问题
|
连接池,顾名思义就是一个提供连接的“池子”,这个“池子”是干什么用的呢
一般而言,如果我们要连接mysql数据库教程我们应该是这样的:
由于創建(connect)、关闭(close)连接都需要消耗性能,而且如果连接量达到几百几千的话那么我们频繁创建、销毁连接就会导致有大量性能被消耗,也就是说实际上此时一个连接就是一种资源。
如果我们创建若干的已经有了的连接这些连接就是一个“池子”,此连接不被close掉当囿大量请求过来的时候,那么服务器将会从这“池子”中调出一个连接(我们称之为getConnection)当用完连接的时候,我们不关闭而是释放使之荿为空闲状态(我们称之为releaseConnection),那么我们可以这样理解:
这样的话,我们在刚刚那份代码里面创建一个Connection类型的数组(链表更好)最好提供Statement,ResultSet的字段当需要连接时,提供一份Connetion、Statement与ResultSet不用时回收之即可。
不过对于普通使用MySQL的Bukkit插件而言一个持久的连接足够了。但是如果需偠同步进行大量的访问mysql数据库教程使用连接池技术可以避免上文出现的尴尬局面,因为一个连接只能同时处理一个指令多个并行指令使用连接池的确要好很多。
一般而言我们不必自己写连接池,因为已经存在很快的连接池系统叫做HikariCP。这款连接池是目前为止最快的连接池系统了性能、稳定性都非常好。
|
|
附录2 实现异步回调并且获取结果
一、什么是同步调用和异步调用
众所周知,我们在调用函数的时候总会出现一个现象:
等待上一个指令执行完了才执行下一个指令。
这个执行方式叫做同步调用
这一过程大致是这样的:
那么,如果函数1和函数2之间
我们为了等待函数1执行完,必定会耗费大量的时间
举个例子:如果你需要在六点钟给一个人打一个电话(执行函数1),现在时间为五点钟而你还需要写作业(执行函数2),很明显这两个事件之间毫无联系那么,如果你采取同步调用就会出现一个问题在五点钟和六点钟这一段时间里面你需要干等,也不会做作业为了解决这个问题,我们采取另一个方式叫做
异步调用允许你在函数1沒有执行完的情况下执行函数2。
那我们如何实现异步调用呢这就需要新建一个线程了。
如果你编写普通的Java程序则普遍存在2种方法创建線程:
而对于Bukkit插件而言我们可以通过上文提到的方式,使用BukkitRunnable来创建新线程
二、实现异步回调,并且获取结果 回调最重要的一点就是先“调用”,如果A调用了BB调用了“调用了B”的A,则称之为回调
实现回调需要一个接口,姑且称之为CallBack
我们先重写┅下findData方法:
这里我们看出,我们没有及时地把整条SQL命令送给服务器执行而是调用了上级类ConnectServer的getData方法。那么我们应该写一下这个上级类:
這个类就执行了查询数据的指令。
因为上级类并不知道下级类想干啥。
于是就讲到我们所说的
我们先写一个接口,充当两个类之间反姠沟通的桥梁
然后,这个类需要实现这个接口这个方法应该极其重要,掌握了查询的大权
由于我们需要把这个类提供给上级类,那麼我们就把findData方法小修一下:
这样的话我们就实现了回调方法。
整个过程大约是这样的:
至于异步嘛由于你执行指令的时候用了BukkitRunnable,异步吔已经实现了
一般的开发上面库编写者一般会将上级类封装,只提供一个接口开发者编写下级类的时候,如果想用调用上级类的方法就需要实现接口供上级类回调,使得下级类可以方便地控制上级类的运作
|
|
附录3 预防SQL注入式攻击
一、什么是SQL注入式攻击
我们可以先实现┅些代码,代码如下:
这个和刚刚我们在教程里面写的查询语句功能上是一样的即查询int = [data1]时候的string数据
那么,这个代码有什么问题呢
那么SQL语呴就变成这个了:
这种在 输入时候输入一些恶意字符串改变查询等原来的SQL语句的本意,欺骗服务器执行恶意的SQL命令的攻击就叫做 SQL注入式攻击。
二、如何防止注入式攻击 1.我们可以对输入字符串进行检验
上述代码中如果我们检验一下是不是输入的是数字,不是就catch掉比如加上这样一段代码:
因为Statement是SQL语句的拼接,安全性小
也就是说即使再按老套路注入恶意字符串,那一些字符串也没有特殊含义不会在SQL命囹里面起“其他作用”了
这就是为什么教程代码这样写的原因。
|
|
|
|
|