博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习-JDBC系列-3-DriverManager介绍
阅读量:4302 次
发布时间:2019-05-27

本文共 2570 字,大约阅读时间需要 8 分钟。

前面4大核心对象基本代码都知道了,现在开始一个一个具体学习每个对象以及这个对象的常用操作和方法。DriverManager类是java.sql下的类,主要有两个功能,注册驱动和获取连接对象。本篇就这两个功能展开,具体来学习下。

1.注册驱动

相关代码

//注册驱动DriverManager.registerDriver(new com.mysql.jdbc.Driver());

前面的例子我们使用上面这行代码去注册驱动,但是,这里要说明这种方式不推荐使用,因为这行代码会driver注册两次,而且强烈依赖jar包,上面是连接mysql,如果以后换成oracle,这个jar包还得改。下面来解释下为什么driver被注册两次。

在JDK文档上,找到DriverMananger这个类,找到注册方法。

这句红圈解释并不好理解,那么我们去Eclipse上看看com.mysql.jdbc.Driver()中这个Driver类的代码。打开Driver.class源码,看到以下这个静态代码块。

在静态代码块里,我们看到调用DriverManager的注册方法,我们知道,在一个类中静态代码块会在类加载之后里面执行。所以以下代码中driver会被执行两次。

//注册驱动DriverManager.registerDriver(new com.mysql.jdbc.Driver());

我们自己调用registerDriver注册一次,然后new Driver对象的时候又在静态代码块中执行一次,所以这行代码执行了两次。

解决办法

使用反射来加载驱动, Class.forName("Driver.class在mysql jdbc包的全路径")

package demo;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JDBCTest {	public static void main(String[] args) throws SQLException, ClassNotFoundException {		//加载驱动		Class.forName("com.mysql.jdbc.Driver");		//获取连接Connection对象		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "123456");		//得到执行SQL语句的Statement对象		Statement stmt = conn.createStatement();		//执行SQL语句,这里是执行查询语句,得到一个虚拟表的结果对象		ResultSet rs = stmt.executeQuery("SELECT * FROM student");		//对结果进行处理,这里是打印		while(rs.next()) {			System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t"+ rs.getObject(4));		}		//关闭连接		rs.close();		stmt.close();		conn.close();	}}

运行一下,和前面一篇一样,也能打印出表信息。其实这两利用反射,Driver.class的全路径,你可以在Eclipse上的包引用展开,找到com.mysql.jdbc.Driver这个类。

以后就用反射方法,用Class.forName的方式。这个driver的全路径,以后我们可以提取出来,放到配置文件中去。以后这个配置文件,可以改成oracle中driver的路径,或者其他数据库的。

2.与数据库建立连接

连接对象获取方法代码

//获取连接Connection对象Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "123456");

我们再次打开JDK中DriverManger类文档

上面有三个连接方法,我这里用的是第三个,有三个参数url,user,password。

先来看看Url这个参数:jdbc:mysql://localhost:3306/mydatabase, 这个url中jdbc是指JDBC协议,mysql是一个子协议,也就是数据库厂商提供的一个协议,是jdbc的子协议,后面localhost:3306,表示一台机器上运行端口3306的mysql服务。后面mydatabase是数据库的名称。简单来说这个url就是JDBC和数据库厂商的一个协议规范,如果连接oracle,这个就可能变成这样

jdbc:oracle:thin:@localhost:1521:sid

至于参数user和password,指的是数据库用户名和密码。

上面三个连接数据库的方法,应该来说,第三个是我们经常使用的,下面把其他两个代码例子也写出来。

Properties info = new Properties();info.setProperty("user","root");info.setProperty("password","123456");getConnection("jdbc:mysql://localhost:3306/mydatabase", info);# 第三种方法getConnection("jdbc:mysql://localhost:3306/mydatabase?user=root&password=123456")

上面两种我就不贴出来完整代码,可以用TestNG或者Junit来写用例测试一下。

转载地址:http://wuows.baihongyu.com/

你可能感兴趣的文章
phpstorm开发工具的设置用法
查看>>
Linux 系统挂载数据盘
查看>>
Git基础(三)--常见错误及解决方案
查看>>
Git(四) - 分支管理
查看>>
PHP Curl发送数据
查看>>
HTTP协议
查看>>
HTTPS
查看>>
git add . git add -u git add -A区别
查看>>
apache下虚拟域名配置
查看>>
session和cookie区别与联系
查看>>
PHP 实现笛卡尔积
查看>>
Laravel中的$loop
查看>>
CentOS7 重置root密码
查看>>
Centos安装Python3
查看>>
PHP批量插入
查看>>
laravel连接sql server 2008
查看>>
Laravel 操作redis的各种数据类型
查看>>
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>