• JDBC


    JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。

    JDBC为访问不同的数据库提供了一种 统一的途径,为开发者屏蔽了一些细节问题。

    JDBC的目标是使Java程序员 使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

    • JDBC驱动程序

    JDBC驱动程序实现JDBC API中定义的接口,用于与数据库服务器进行交互。

    例如,使用JDBC驱动程序可以打开数据库连接,并通过发送SQL或数据库命令,然后收到结果与Java进行交互。

    java.sql包中附带的JDK包含定义各种类与他们的行为和实际实现在第三方驱动程序。第三方供应商实现了他们的数据库驱动程序的 java.sql.Driver 接口。

    • 类型1:JDBC-ODBC桥驱动程序
    • 类型2:JDBC-Native API调用
    • 类型3:JDBC网络纯Java
    • 类型4:100%纯Java

     

     

    • JDBC连接数据库

    在安装相应的驱动程序后,可以建立使用JDBC的数据库连接。

    建立一个JDBC连接的四个步骤:

    • 导入JDBC包:添加import语句到Java程序导入所需的类在Java代码中。
    • 注册JDBC驱动程序:这一步会导致JVM加载所需的驱动程序实现到内存中,因此它可以实现JDBC请求。
    • 数据库URL制定:这是创建格式正确的地址指向到要连接的数据库。
    • 创建连接对象:最后,代码调用DriverManager对象的getConnection()方法来建立实际的数据库连接。
    • 导入JDBC包
    import java.sql.* ;  // for standard JDBC programs
    import java.math.* ; // for BigDecimal and BigInteger support
    • 注册JDBC驱动程序

    使用它之前,必须注册你的驱动程序在程序。注册驱动程序是由Oracle驱动程序的类文件被加载到内存中以便它可以被用作JDBC接口的实现过程。

    方法(1):Class.forName()

    try {
       Class.forName("oracle.jdbc.driver.OracleDriver");
    }
    catch(ClassNotFoundException ex) {
       System.out.println("Error: unable to load driver class!");
       System.exit(1);
    }

    方法(2):DriverManager.registerDriver()

    try {
       Driver myDriver = new oracle.jdbc.driver.OracleDriver();
       DriverManager.registerDriver( myDriver );
    }
    catch(ClassNotFoundException ex) {
       System.out.println("Error: unable to load driver class!");
       System.exit(1);
    }

    数据库URL制定

    在注册驱动程序后,以建立程序中使用DriverManager.getConnection()方法的连接。

    三个DriverManager.getConnection()方法:

    • getConnection(String url)

    jdbc:oracle:driver:username/password@database
    //在这种情况下,数据库的URL,包括用户名和密码
    String URL = "jdbc:oracle:thin:username/password@amrood:1521:EMP";
    Connection conn = DriverManager.getConnection(URL);
    • getConnection(String url, Properties prop)

    import java.util.*;
    
    String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
    Properties info = new Properties( );
    info.put( "user", "username" );
    info.put( "password", "password" );
    
    Connection conn = DriverManager.getConnection(URL, info);
    • getConnection(String url, String user, String password)

    在这里,每个表单需要一个数据库URL。数据库的URL是指向数据库地址。

    下表列出了下来流行的JDBC驱动程序名和数据库的URL。

    创建连接对象

    下面三种形式DriverManager.getConnection()方法来创建一个连接对象。getConnection()最常用形式要求传递一个数据库URL,用户名 username和密码 password。

    对URL数据库部分databaseName的值:假设使用的是Oracle的瘦驱动程序,需要指定一个主机:端口。

    假设有一台主机TCP/IP地址192.0.0.1 以及主机名和Oracle监听器被配置为在端口1521,数据库名称是EMP,然后完整的数据库URL是:

    String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
    String USER = "username";
    String PASS = "password"
    Connection conn = DriverManager.getConnection(URL, USER, PASS);

     关闭JDBC连接

    JDBC程序的结束,它明确要求关闭所有的连接到数据库,以结束每个数据库会话。但是,如果忘了,Java垃圾收集器会关闭连接时,它会清除陈旧的对象。

    conn.close();
    • JDBC Statements,PreparedStatement和CallableStatement

    一旦获得一个连接,我们可以与数据库进行交互。在JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,使可以发送SQL或PL/SQL命令和从数据库接收数据。

     

    Statement对象:

    可以使用Statement对象执行SQL语句,需要使用Connection对象的createStatement( )方法创建一个,如下面的示例所示: 

    Statement stmt = null;
    try {
       stmt = conn.createStatement( );
       . . .
    }
    catch (SQLException e) {
       . . .
    }
    finally {
       stmt.close();
    }

    一旦创建了一个Statement对象,然后可以用它来与它的三个执行方法之一执行SQL语句。

    • boolean execute(String SQL) : 如果ResultSet对象可以被检索返回布尔值true,否则返回false。使用这个方法来执行SQL DDL语句,或当需要使用真正的动态SQL。

    • int executeUpdate(String SQL) : 返回受影响的SQL语句执行的行的数目。使用此方法来执行,而希望得到一些受影响的行的SQL语句 - 例如,INSERT,UPDATE或DELETE语句。

    • ResultSet executeQuery(String SQL) : 返回ResultSet对象。当希望得到一个结果集使用此方法,就像使用一个SELECT语句。

    PreparedStatement对象:

    PreparedStatement pstmt = null;
    try {
       String SQL = "Update Employees SET age = ? WHERE id = ?";
       pstmt = conn.prepareStatement(SQL);
       . . .
    }
    catch (SQLException e) {
       . . .
    }
    finally {
       ptmt.close();
    }

    在JDBC中所有的参数都被代表?符号,这是已知的参数标记。在执行SQL语句之前,必须提供值的每一个参数。

    setXXX()方法将值绑定到参数,其中XXX表示希望绑定到输入参数值的Java数据类型。如果忘了提供值,将收到一个SQLException。

    每个参数标记是由它的序号位置引用。第一标记表示位置1,下一个位置为2 等等。这种方法不同于Java数组索引,以0开始。

    所有的Statement对象的方法来与数据库交互(a) execute(), (b) executeQuery(), 及(c) executeUpdate() 也与PreparedStatement对象的工作。然而,该方法被修改为使用SQL语句,可以利用输入的参数。

    CallableStatement 对象:

  • 相关阅读:
    mybatis plus使用redis作为二级缓存
    netty无缝切换rabbitmq、activemq、rocketmq实现聊天室单聊、群聊功能
    netty使用EmbeddedChannel对channel的出入站进行单元测试
    记jdk1.8中hashmap的tableSizeFor方法
    Cannot find class: BaseResultMap
    windows下远程访问Redis,windows Redis绑定ip无效,Redis设置密码无效,Windows Redis 配置不生效,Windows Redis requirepass不生效,windows下远程访问redis的配置
    学习记录
    eclipse的注释
    转:聊聊同步、异步、阻塞与非阻塞
    点滴笔记(二):利用JS对象把值传到后台
  • 原文地址:https://www.cnblogs.com/dear_diary/p/6657845.html
Copyright © 2020-2023  润新知