JDBC第一篇---数据库的连接

第一篇—了解JDBC和五个连接

1.1 JDBC介绍

  • JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这些类库可以以一种标准的方法、方便地访问数据库资源。
  • JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
  • JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
  • 如果没有JDBC,那么Java程序访问数据库时是这样的:

JDBC第一篇---数据库的连接_第1张图片


  • 有了JDBC,Java程序访问数据库时是这样的:

JDBC第一篇---数据库的连接_第2张图片


  • 总结如下:

JDBC第一篇---数据库的连接_第3张图片

1.2 JDBC体系结构

  • JDBC接口(API)包括两个层次:

    • 面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
    • 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。

JDBC是sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。

不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。 ————面向接口编程

1.3 JDBC程序编写步骤

JDBC第一篇---数据库的连接_第4张图片

补充:ODBC(Open Database Connectivity,开放式数据库连接),是微软在Windows平台下推出的。使用者在程序中只需要调用ODBC API,由 ODBC 驱动程序将调用转换成为对特定的数据库的调用请求。

1.4获取数据库连接

1.4.1Driver接口类

  • 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以上的版本

JDBC第一篇---数据库的连接_第5张图片

  • 将上述jar包拷贝到Java工程的一个目录中,习惯上在.idea目录下新建一个lib文件夹。
  • 在驱动jar上右键–>Add as Library -->确定
    JDBC第一篇---数据库的连接_第6张图片

完成之后让我们开始数据库的连接吧!

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地址) ,端口号,数据库名
        例如 :

JDBC第一篇---数据库的连接_第7张图片

  • 要素2 :用户名和密码

    • user,password可以用“属性名=属性值”方式告诉数据库
    • 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接
  • 要素3 :properties回顾

  1. 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的常用方法:(常用标*, 其他了解即可) \

  1. setProperty(String key, String value)调用 Hashtable 的方法 put。
  2. getProperty(String key)用指定的键在此属性列表中搜索属性
  3. getProperty(String key, String defaultValue)用指定的键在属性列表中搜索属性。
  4. load(InputStream inStream)从输入流中读取属性列表(键和元素对)。
  5. load(Reader reader)按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
  6. loadFromXML(InputStream in)将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。
  7. store(OutputStream out, String comments)以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
  8. store(Writer writer, String comments)以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。
  9. storeToXML(OutputStream os, String comment)发出一个表示此表中包含的所有属性的 XML 文档。
  10. 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);

}

JDBC第一篇---数据库的连接_第8张图片

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

说明:使用配置文件的方式保存配置信息,在代码中加载配置文件
使用配置文件的好处:
①实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码
②如果修改了配置信息,省去重新编译的过程。

虽然我们学习了五种连接方式,但我们只要学会使用最后一种方式即可,看到这里,本篇文章就结束了, 如果有帮助的话, 还不点个小爱心嘛

e73c5b0db665f22dbfdec8b41b288f41.gif

你可能感兴趣的:(java,jar,java-ee)