JDBC(Java Database Connectivity)介绍
首先先介绍一下什么是JDBC?
1、 JDBC即Java数据库连接,是java语言中用来规范客户端程序如何来访问数据库应用程序接口,提供了诸如查询和更新数据库中数据的方法。(百度百科)
2、JDBC为访问不同的数据库提供了统一的途径,为开发者屏蔽了一些细节问题。
3、JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无须对特定的数据库系统有过多的了解,从而大大简化和加快了开发的过程。
没有JDBC,Java程序访问数据库是是这样的:
有了JDBC,Java程序访问数据库时是这样的:
但其实真实的连接是这样的:
所以总体来说,JDBC是一组规范:接口。为访问不同数据库提供了统一的途径。
JDBC API (Application Programming Interface)—JDBC应用程序接口
JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql包中),主要包括(斜体代表接口,需驱动程序提供者来具体实现):
DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。
Driver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。
Connection:数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。但是存在sql注入问题,所以最好使用PareparedStatement来进行动态的操作。
PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。也就是所说的预编译处理。但是PreparedStatement extends Statement
CallableStatement:用以调用数据库中的存储过程。SQLException:代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)。
JDBC程序的编写步骤
首先需要导入相关的jar包。主要是指
以下是几种连接方式:
//方式一:直接使用Driver实现类进行数据库的连接
@Test
public void testConnection1() throws SQLException{
Driver driver = new Driver();
//jdbc:mysql : 协议
//localhost:ip地址
//3306:默认mysql的端口号
//test:数据库
String url = "jdbc:mysql://localhost:3306/test";
//将用户名和密码封装在Properties中
Properties info = new Properties();
info.setProperty("user" , "root");
info.setProperty("password" , "123456");
Connection con = driver.connect(url , info);
System.out.println(con);
}
//方式二:对方式一的迭代 在方式一的基础上使用反射,更利于java的编程思想
@Test
public void testConnection2() throws Exception{
//获取Driver对象 使用反射
Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver)clazz.newInstance();
//jdbc:mysql : 协议
//localhost:ip地址
//3306:默认mysql的端口号
//test:数据库
String url = "jdbc:mysql://localhost:3306/test";
//将用户名和密码封装在Properties中
Properties info = new Properties();
info.setProperty("user" , "root");
info.setProperty("password" , "123456");
Connection con = driver.connect(url , info);
System.out.println(con);
}
//方式三:使用DriverManager替换Driver
@Test
public void testConnection3() throws Exception {
//获取Driver对象 使用反射
Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver)clazz.newInstance();
//提供连接信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
//方式四:可以只是加载驱动,不用显示注册驱动了
@Test
public void testConnection4() throws Exception {
//加载Driver 会自动加载静态代码块 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//提供连接信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
//方式五:将数据库连接需要的四个基本信息 声明在配置文件中 读取配置文件获取连接
@Test
public void testConnection5() throws Exception {
//读取配置文件的基本信息
InputStream inputStream = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(inputStream);
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String driverClass = properties.getProperty("driverClass");
//加载驱动
Class.forName(driverClass);
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
至于方式四我们可以看一下Driver类的源码:
由此可知Driver类有静态代码,其中代码功能为注册驱动,因此在加载Driver的时候会自动加载静态代码块(即注册驱动)。所以可以去掉方式三中的一些代码。
方式五的配置文件内容如下:
以上是作者最近学习JDBC的一些记录,主要用于巩固知识,加深印象。其中可能有一些不正确的地方,还请指出。
覆盖着积雪的乞力马扎罗山高19710英尺,据说是非洲境内最高的一座山峰。山的西主峰被马赛人称作“纳加奇——纳加伊”,意思是“上帝的殿堂”。靠近西主峰的地方有一具冻僵风干了的豹子尸体。豹子在那么高的地方寻找什么,没有人做出过解释。 ——海明威《乞力马扎罗山的雪》