JDBC连接数据库

在Windows操作系统中,Java语言利用JDBC连接数据库有两种办法。一种是直接通过JDBC和数据库官方提供的支持驱动JAR包进行连接;还有一种则是用JDBC桥连接被广泛使用的ODBC,然后在ODBC中配置数据库相关信息进行连接。

 什么是JDBC和ODBC?

JDBC(Java DataBase Connectivity Java数据库连接)是一种规范化的Java关系数据库API,是如今各种关系数据库应用在Java上共同遵循的约定。

ODBC(Open Database Connectivity 开放数据库连接)是为解决异构数据库间的数据共享而产生的,允许应用程序以SQL 为数据存取标准,存取不同数据库管理系统管理的数据;使应用程序直接操纵数据库中的数据,免除随数据库的改变而改变。用ODBC 可以访问各类计算机上的数据库文件。

 

 JDBC直接连接(以连接Mysql数据库为案例,IDE为IDEA)

如上图,将mysql驱动的Jar包添加到项目环境中,然后点击Jar包,在下一层的com.mysql.jdbc包中找出驱动类文件,一般都是以Driver英文结尾的类文件。在注册不同的数据库驱动时这一点都差不多。

/*
* 注册驱动
* 在项目目录中导入mysql驱动jar包
* 这里注意Class.forName(类的全名)的语法
* */
Class.forName("com.mysql.jdbc.Driver");

因为在这里我们需要知道数据库驱动类文件的类全名,即com.mysql.jdbc.Driver。这里会报一个ClassNotFoundException异常,将代码包裹进异常处理块或者将异常抛出都可以。


注册完驱动之后,我们现在就可以跟Mysql数据库建立连接了,不过在此之前我们要先启动Mysql数据库。

通过在mysql命令行中使用show databases;我们可以查看其中数据库,这里以连接到test数据库为例。

/*
* DriverManager.getConnection(url,username,password);
* url格式:jdbc:数据库种类:分隔符:IP地址:端口号 分隔符 数据库名
* */
String url = "jdbc:mysql://localhost:3306/test";
    try(Connection connection = DriverManager.getConnection(url,"root","root")){
        if(connection != null){
            System.out.println("数据库连接成功!");
        }else{
            System.out.println("数据库连接失败!");
        }
   }

我们将连接的声明和获取包裹在try的资源块中,这将使它在try{}块结束时自己关闭连接,实现了closeable接口的类都可以包裹进try块中达到同样的功能。

不同的数据库在url的写法上还是有小小的差别,下面我们列举几个数据库使用JDBC直接连接中url的不同。

  • Oracle:url="jdbc:oracle:thin:@IP地址:端口号:数据库名或SID",example:"jdbc:oracle:thin:@localhost:1521:orcl1"。
  • SQL Server 2005之后:url="jdbc:sqlserver://IP地址:端口号;DatabaseName = 数据库名",example:"jdbc:sqlserver://localhost:1433;DatabaseName = database1"。
  • JavaDB(derby):url="jdbc:derby:数据库名",derby为Javajdk自带的小型数据库,只适合本机简单的项目使用,所以它的Url写法比较简单,不需要区分IP地址和端口等信息。

这里对Oracle数据库url中的thin补充说明,oracle的驱动有三中连接方式,即thin(不需要oracle客户端)、OCI(需要oracle客户端)、KPRB(由直接存储在数据库中的Java程序使用,固不需要用户名与密码也不需要url)。


 

JDBC-ODBC桥连接(以Access数据库为案例)

注意:从jdk1.8开始Java便不再支持JDBC-ODBC桥连接这种方式。所以jdk1.8即后续版本没有相应的驱动类文件,这是因为桥连接是能用于本地连接而且ODBC是基于Windows系统的,局限性太大。

通过上面JDBC-ODBC桥连接过程解析图可以知道,我们先将ODBC中配置好关系数据库(这里是Access)的数据源(DSN),在创建数据源的过程中我们需要关联Access数据库中我们需要使用的数据库文件。然后我们通过JDK提供的桥连接驱动使JDBC和ODBC进行桥连接,以此来达到连接目标关系数据库的目的。

下面我将详细步骤演示一遍:

我们从上述目录中找到ODBC数据源管理的程序(在控制面板的管理工具里也可以找到,但是如果使用这里面的数据源管理程序的话,有的windows系统在添加数据源时会找不到目标数据库的数据源)。


我们在系统DSN中点击右侧的添加按钮,出现安装数据源驱动界面,选择相应的数据库驱动,然后输入其中的数据源名这个数据源名就是你用JDBC-ODBC桥连接时要用到的唯一一个外部的名称。输入完数据源名称后我们就要关联数据库文件了,下图我使用Access创建了数据库文件Database12,黄色框是磁盘驱动器选择,蓝色是目录选择,红色框是文件选择,这里选中后单击确定即可。系统数据库我们不要管。

这是我们看到系统DSN中出现了我们创建的数据源。这时我们可以使用JDBC-ODBC桥连接驱动进行连接了。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class FuUse{
    public static void main(String[] args)throws SQLException {
        try {
            /*
            * 注册驱动
            * 这里注意Class.forName(类的全名)的语法
            * */
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            /*
            * DriverManager.getConnection(url);
            * */
            String url = "jdbc:odbc:DBAccesstest";
            try(Connection connection = DriverManager.getConnection(url)){
                if(connection != null){
                    System.out.println("数据库连接成功!");
                }else{
                    System.out.println("数据库连接失败!");
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

查看代码,我们在写url的时候使用了数据源的名称,因为这种桥连接是通过ODBC配置好的,所以我们即不需要账户密码,也不需要IP和端口等信息。

 

posted @ 2018-12-09 14:42  问月晚安  阅读(165)  评论(0编辑  收藏  举报