数据库操作的桥梁-JDBC学习笔记

数据库操作的桥梁-JDBC学习笔记

    JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API。


JDBC API提供了以下接口和类:

  • DriverManager: 这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。

  • Driver: 此接口处理与数据库服务器通信。很少直接直接使用驱动程序(Driver)对象,一般使用DriverManager中的对象,它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息

  • Connection : 此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过此唯一的连接对象。

  • Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。

  • ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,可以通过移动它来检索下一个数据。

  • SQLException: 这个类用于处理发生在数据库应用程序中的任何错误。

构建JDBC应用程序涉及以下六个步骤 -

  • 导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用import java.sql.*就足够了。
  • 注册JDBC驱动程序:需要初始化驱动程序,以便可以打开与数据库的通信通道。
  • 打开一个连接:需要使用DriverManager.getConnection()方法创建一个Connection对象,它表示与数据库的物理连接。
  • 执行查询:需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
  • 从结果集中提取数据:需要使用相应的ResultSet.getXXX()方法从结果集中检索数据。
  • 清理环境:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。

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

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

JDK附带的Java.sql包包含各种类,其类的行为被定义,实现在第三方驱动程序中完成。 第三方供应商在其数据库驱动程序中实现java.sql.Driver接口。MySQL Connector/J驱动程序是基于纯Java的驱动程序通过套接字连接与供应商的数据库直接通信。 这是数据库可用的最高性能驱动程序,通常由供应商自己提供。

在使用jdbc时,首先需要注册jdbc驱动,通常我们通过

注册驱动程序最常见的方法是使用Java的Class.forName()方法,将驱动程序的类文件动态加载到内存中,并将其自动注册。这个方法是推荐使用的方法,因为它使驱动程序注册可配置和便携。

以下示例使用Class.forName()注册Oracle驱动程序 -

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


数据库厂家提供的驱动oracle.jdbc.driver.OracleDriver或者com.mysql.jdbc.Driver都实现了java.sql.Driver接口,

注册驱动程序是将Oracle或mysql驱动程序的类文件加载到内存中的过程,因此可以将其用作JDBC接口的实现。Class.forName()方法将类文件

加载至内存中, 之后完成类的初始化, 从而可以实现将厂商提供的驱动注册至DriverManager中。

	static {
		try {
			java.sql.DriverManager.registerDriver(new Driver());
		} catch (SQLException E) {
			throw new RuntimeException("Can't register driver!");
		}
	}

加载驱动程序后,可以使用DriverManager.getConnection()方法建立连接。 为了方便参考,这里列出三个重载的DriverManager.getConnection()方法 -

  • getConnection(String url)
  • getConnection(String url, Properties prop)
  • getConnection(String url, String user, String password)

这里每个格式都需要一个数据库URL。


在JDBC程序结束之后,显式地需要关闭与数据库的所有连接以结束每个数据库会话, connection.closer();

当获得了与数据库的连接后,就可以与数据库进行交互了。 JDBC StatementCallableStatementPreparedStatement接口定义了可用于发送SQL或PL/SQL命令,并从数据库接收数据的方法和属性。


无论哪种对象,在执行完sql的操作之后,都需要显式关闭。

SQL语句执行后从数据库查询读取数据,返回的数据放在结果集中。 SELECT语句用于从数据库中选择行并在结果集中查看它们的标准方法。 java.sql.ResultSet接口表示数据库查询的结果集。

ResultSet对象维护指向结果集中当前行的游标。 术语“结果集”是指包含在ResultSet对象中的行和列数据。ResultSet接口中有几种涉及移动光标的方法,包括 



package learn.zhujq.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * @author jinQiang.zhu
 *
 */
public class jdbcDemo1 {
    // JDBC driver name and database URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/learning";

    //  Database credentials -- 数据库名和密码自己修改
    static final String USER = "root";
    static final String PASS = "123456";
    
    public static void main(String[] args) {
        Connection conn = null;
        Statement stat = null;
        try {
            //STEP 2: Register JDBC driver, 
            //在Class.forName加载完驱动类,开始执行静态初始化代码时,会自动新建一个Driver的对象,
            //并调用DriverManager.registerDriver把自己注册到DriverManager中去。
            Class.forName("com.mysql.jdbc.Driver");
            //STEP 3: Open a connection
            System.out.println("Connecting to database...");
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            
            //STEP 4: Execute a query
            System.out.println("Creating statement...");
            stat = conn.createStatement();
            String sql = "select * from group_space";
            ResultSet rs = stat.executeQuery(sql);
            
            System.out.println("rs=" + rs);
            while (rs.next()) {
                Long groupId = rs.getLong("GROUP_ID");
                System.out.println("groupId=" + groupId);
            }
            //STEP 6: Clean-up environment
            rs.close();
            stat.close();
            conn.close();
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值