注: 我们抛掉了 MyUtil.
我把通讯过程封装到下面的三个类中
Driver 用于连接服务器的驱动程序, 返回一个 Connection 对象
Connection 控制连接的建立与关闭, 创建 SQL 语句执行对象
Statement SQL 语句执行对象, 发送 SQL 语句, 返回查询结果
ResultSet 查询结果
上述类的关系可以表示如下:
Driver-> 产生 Connection-> 产生 Statement-> 产生 ResultSet
Driver 相当于数据库的驱动程序, 按照通用的软件逻辑来看, 软件使用前, 需要安装驱动程序并将驱动程序注册到操作系统. 这样下次就可以直接使用软件了.
所以我们需要一个安装驱动的过程.
接下来我们对这条语句进行改造:
- MyConnection conn = MyDriver.connect("127.0.0.1",8000,"root","abc");
- // 安装驱动程序
- MyDriver myDriver = new MyDriver();
- myDriver.install();
- // 注册驱动程序
- myDriver.regist();
- MyConnection conn1 = myDriver.connect("127.0.0.1",8000,"root","abc");
- MyConnection conn2 = myDriver.connect("127.0.0.1",8000,"root","abc");
这样在安装并注册完驱动程序后, 我们就可以从获得数据库连接开始操作数据库了.
如果 conn1 和 conn2 不在同一方法 / 类中, 我们需要把 myDriver 传来到使用他的方法 / 类中, 才能获得数据库连接.
显然这不是我们想要的.
我们需要的理想方式是, 一次安装注册, 到处使用.
不依赖于具体的实例的话, 我们需要用静态方法来实现, 因为静态方法在程序运行期间不依赖于具体的实例,
所以我们做一个 MyDriverManager, 把安装好的驱动程序注册到这里, 然后每次从 MyDriverManager 中取得连接.
- MyDriver myDriver = new MyDriver();
- myDriver.installAndRegist();
- MyConnection conn = MyDriverManager.getConnection("myrule:mydb:127.0.0.1:8000", "root","abc");
注: 我们对参数进行了改造, 第一个参数由规则名: 数据库名: IP 地址: 端口号组成, 这样我们将来可以支持不同的协议和数据库种类.
因为驱动也只有一份, 所以, 我们也不需要生成具体的实例.
MyDriver.installAndRegist();
但这样, 在程序中还需要导入 MyDriver 的包, 我们把驱动程序写道 static 块中, 然后改成这样
Class.forName("driver.MyDriver");
代码改造成这样:
来源: https://www.cnblogs.com/java123vip/p/8980838.html