- JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和 *** 作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这些类库可以以一种标准的方法、方便地访问数据库资源。
- JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
- JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
- 如果没有JDBC,那么Java程序访问数据库时是这样的:
- 有了JDBC,Java程序访问数据库时是这样的:
- 总结如下:
-
JDBC接口(API)包括两个层次:
- 面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
- 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。
1.3 JDBC程序编写步骤JDBC是sun公司提供一套用于数据库 *** 作的接口,java程序员只需要面向这套接口编程即可。
不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。 ————面向接口编程
1.4获取数据库连接 1.4.1Driver接口类补充:ODBC(Open Database Connectivity,开放式数据库连接),是微软在Windows平台下推出的。使用者在程序中只需要调用ODBC API,由 ODBC 驱动程序将调用转换成为对特定的数据库的调用请求。
- java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。
- 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。
-
Oracle的驱动:oracle.jdbc.driver.OracleDriver
-
mySql的驱动: com.mysql.jdbc.Driver (5.0版本)
链接:https://pan.baidu.com/s/143CdAmYhgo_RJOzLudbKAQ?pwd=n660 -
mySql的驱动: com.mysql.cj.jdbc.Driver (8.0版本)
下载链接: https://dev.mysql.com/downloads/file/?id=477058
接下来我们使用的都是8.0以上的版本
-
- 将上述jar包拷贝到Java工程的一个目录中,习惯上在.idea目录下新建一个lib文件夹。
- 在驱动jar上右键–>Add as Library -->确定
完成之后让我们开始数据库的连接吧!
1.4.2 数据库连接1. 连接方式一
public class ConnectionTest {
/*
* 1.获取driver实现类对象
* 2.提供需要连接的数据库url
* 3.提供需要的用户名和密码,将它存在properties中
* 4.connection 获取连接
* */
//@Test ctrl + T 导包 可以测试方法
@Test
public void testConnection1() throws Exception {
Driver driver = new com.mysql.cj.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";
//这里test是用户自己数据库的名字,大家适当做出改变,这里我们使用的是mysql8.0版本
Properties info = new Properties() ;
//用户名和密码封装在Properties当中
info.setProperty("user", "root");
info.setProperty("password", "123.com");
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
考虑基础比较薄弱的同学对一些问题不太了解,我们来回顾一下一些前置知识
- 要素一 :url
-
JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
-
JDBC URL的标准由三部分组成,各部分间用冒号分隔。
- jdbc:子协议:子名称
- 协议:JDBC URL中的协议总是jdbc
- 子协议:子协议用于标识一个数据库驱动程序
- 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址) ,端口号,数据库名
例如 :
-
-
要素2 :用户名和密码
- user,password可以用“属性名=属性值”方式告诉数据库
- 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接
-
要素3 :properties回顾
- Properties文件是java中很常用的一种配置文件,文件后缀为“.properties”,属文本文件,文件的内容格式是“键=值”的格式,可以用“#”作为注释,java编程中用到的地方很多,运用配置文件,可以便于java深层次的解耦。例如java应用通过JDBC连接数据库时,通常需要在代码中写数据库连接字符串,下面贴出java通过JDBC连接数据库的代码(以mysql为例):
user=root
password=123.com
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT
#driverClass是随便命名,看代码中用的是什么名字
driverClass=com.mysql.cj.jdbc.Driver
虽然这里没有用到properties文件,但在第五种连接会用到大家先有一个印象
2.Properties类
java中提供了配置文件的 *** 作类Properties类(java.util.Properties):
public class Properties extends Hashtable.可见Properties类继承了Hashtable,而HashTable又实现了Map接口,所以方法内的参数是一对键值对
Properties的常用方法:(常用标*
, 其他了解即可) \
- setProperty(String key, String value)调用 Hashtable 的方法 put。
- getProperty(String key)用指定的键在此属性列表中搜索属性
- getProperty(String key, String defaultValue)用指定的键在属性列表中搜索属性。
- load(InputStream inStream)从输入流中读取属性列表(键和元素对)。
- load(Reader reader)按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
- loadFromXML(InputStream in)将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。
- store(OutputStream out, String comments)以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
- store(Writer writer, String comments)以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。
- storeToXML(OutputStream os, String comment)发出一个表示此表中包含的所有属性的 XML 文档。
- storeToXML(OutputStream os, String comment, String encoding)使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。
2. 连接方式二
@Test
public void testConnection2() throws Exception {
// Driver driver = new com.mysql.cj.jdbc.Driver();
//获取Driver实现类对象,使用反射, 没有使用第三方的API,程序具有更好的可移植性
Class> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";
Properties info = new Properties() ;
//用户名和密码封装在Properties当中
info.setProperty("user", "root");
info.setProperty("password", "123.com");
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
说明:相较于方式一,这里使用反射实例化Driver,不在代码中体现第三方数据库的API。体现了面向接口编程思想。
3.连接方式三
@Test
public void testConnection3() throws Exception {
Class> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
//注册驱动
DriverManager.registerDriver(driver);
//提供3个connection所需要的基本信息
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";
// 第一种方式
//String user = "root";
//String password = "123.com";
//Connection conn = DriverManager.getConnection(url, user, password);
//第二种把user和password封装在inno对象中
Properties inno = new Properties();
inno.setProperty("user", "root");
inno.setProperty("password", "123.com");
Connection conn = DriverManager.getConnection(url, inno);
System.out.println(conn);
}
说明:使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。
4.连接方式四
@Test
public void testConnection4() throws Exception {
//加载Driver
// Class> clazz = 被注释掉
Class.forName("com.mysql.cj.jdbc.Driver");
// 可以省略下面的 *** 作,mysql实现类中声明了静态代码块,实现下面的注册的 *** 作,静态代码块随着类加载的时候而执行
//Driver driver = (Driver) clazz.newInstance();
//DriverManager.registerDriver(driver);
//提供3个connection所需要的基本信息
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";
String user = "root";
String password = "123.com";
Connection conn = DriverManager.getConnection(url, user, password);
//第二种大家记住第一种即可
//Properties inno = new Properties();
//inno.setProperty("user", "root");
//inno.setProperty("password", "123.com");
//Connection conn = DriverManager.getConnection(url, inno);
System.out.println(conn);
}
5. 连接方式五
@Test
public void testConnection5() throws Exception {
// Class> clazz =
//加载Driver
106行 //Class.forName("com.mysql.cj.jdbc.Driver");
// 可以省略下面的 *** 作,mysql实现类中声明了静态代码块,实现下面的注册的 *** 作,静态代码块随着类加载的时候而执行
//Driver driver = (Driver) clazz.newInstance();
//DriverManager.registerDriver(driver);
//提供3个connection所需要的基本信息
//String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";
// String user = "root";
// String password = "123.com";
//将上面的放在配置文件中,为何放在配置文件中呢,是因为我们在打包一个程序成jar包的时候,我们如果修改上述内容,需要重新打jar包
//但如果我们就将上面的内容放在配置文件中的话,由于配置文件可以随时更改,就更加方便,节约时间
// 类加载器
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
//创建properties对象加载配置文件
Properties pros = new Properties();
pros.load(is);
String user1 = pros.getProperty("user");
String password1 = pros.getProperty("password");
String url1 = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
Class.forName(driverClass); //代替106行加载驱动
Connection conn = DriverManager.getConnection(url1, user1, password1);
System.out.println(conn);
}
其中,配置文件声明在工程的src目录下:【jdbc.properties】
user=root
password=123.com
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT
#driverClass是随便命名,看代码中用的是什么名字
driverClass=com.mysql.cj.jdbc.Driver
说明:使用配置文件的方式保存配置信息,在代码中加载配置文件
使用配置文件的好处:
①实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码
②如果修改了配置信息,省去重新编译的过程。
虽然我们学习了五种连接方式,但我们只要学会使用最后一种方式即可,看到这里,本篇文章就结束了, 如果有帮助的话, 还不点个小爱心嘛
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)