JDBC技术

JDBC技术

驱动器接口:Driver

任何一种数据库驱动程序都提供一个 java.sql.Driver 接口的驱动类,在加载某个数据库驱动程序的驱动类时,都创建自己的实例对象并向 java.sql.DriverMange 类注册该实例对象。

驱动管理类:Drivermanger

java.sql.DriverManger 类是 JDBC 的管理层,它负责管理 JDBC 驱动程序的基本服务。

DriverManger 注册的方式有以下两种:

  • 通过 Class 静态类中的 forName()方法进行调用。
  • 通过将数据库驱动名称添加到 java.lang.System 类中的 jdbc.drivers 属性中。

加载驱动类并在 DriverManger 类中注册后,即可用来与数据库建立连接,使用getConnection 方法调用。

数据库连接接口:Connection

java.sql.Connection 接口表示与特定数据库的连接,并在连接的上下文中可以执行 SQL 语句并返回结果。并通过 Connection 类对象的 close() 方法将连接关闭。

Statement 对象有三种类型

  • Statement:执行静态 SQL 语句的对象。
  • PreparedStatement: 执行预编译 SQL 语句对象。
  • CallableStatement:执行数据库存储过程。

执行 executeUpdate()方法或executeQuery(String sql)时,会抛出 SQLException 类型的异常,所以需要通过try-catch 进行捕捉。

执行静态 SQL 语句接口的:Statement

处理静态的 SQL 语句主要分为3种 Statement 对象:Statement, PreparedStatement, CallableStatement。

  • 创建 Statement 对象 Statement 对象可以通过 Connection 对象中的 createStatement() 方法进行创建。 Connection con = DriverManger.getConnection(url, "sa", ""); //取得数据库连接 Statement stmt = con.createStatement(); //获取Statement 对象
  • 使用 Statement 对象执行 SQL 语句 举个例子: ResultSet rs = stmt.executeQuery("select * from user");
  • 关闭 Statement 对象

执行预编译的 SQL 语句接口:PreparedStatement

该语句为每一个参数保留一个问号 (?) 作为占位符。每个问号的值必须在该语句执行之前,通过适当的 setXXX() 方法来提供。

举个栗子:

// 创建 PreparedStatement 对象
PreparedStatement psmt = con.prepareStatement("update my_table set m = ? where x = ?");
//传递多参数
pstmt.setString(1, "a");
pstmt.setString(2, "b");

处理存储过程语句接口:CallableStatement

  • 创建 CallableStatement 对象 CallableStatement 对象是用 Connection 类中的 prepareCall() 方法创建。 举个栗子: CallableStatement cstmt = con.prepareCall("{call getTestData(?, ?)}"); ? 占位符是输入、输出还是输入和输出参数,取决于存储过程 getTestData。
  • 将输入参数传给 CallableStatement 对象是通过 setXXX() 方法完成的。如果存储过程返回的是输出参数,则在执行 CallableStatement 对象钱必须先注册每个输出参数的 JDBC 类型。注册 JDBC 类型是用 registerOutParameter() 方法来完成的。 CallableStatement cstmt = con.prepareCall("{call getTestData(?, ?)}"); //调用存储过程 cstmt.registerOutParameter(1, java.sql.Types.TINYINT); //向问号传递参数 cstmt.registerOutParameter(2, java.sql.Types.DECIMAL, 3); //向问号传递参数 cstmt.executeQuery(); //执行存储过程 byte x = cstmt.getByte(1); java.math.BigDecimal n = cstmt.getBigDeciaml(2,3);
  • 执行存储过程

获取查询结果

  • 执行 executeUpdate()方法,将返回一个int 型数值。
  • 执行 executeQuery()方法,将返回一个ResultSet 类型的结果集。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏wannshan(javaer,RPC)

dubbo通信消息解析过程分析(1)

由于rpc底层涉及网络编程接口,线程模型,网络数据结构,服务协议,细到字节的处理。牵涉内容较多,今天就先从一个点说起。 说说,dubbo通过netty框架做传...

55760
来自专栏分布式系统进阶

Librdkafka的基础数据结构 2 --- 定时器 原子操作与引用计数

引用了一个新的struct来将引用计数和调用信息结合起来, 使用链表来管理这个struct的对象. 每次对引用计数的操作都要操作这个链表.

11410
来自专栏Java开发

读取数据库时报java.sql.SQLException: 流已被关闭

使用Connection、Statement/PreparedStatement、ResultSet来取数据库信息:

15620
来自专栏Java面试笔试题

JDBC能否处理Blob和Clob?

Blob是指二进制大对象(Binary Large Object),而Clob是指大字符对象(Character Large Objec),因此其中Blob是为...

31550
来自专栏DT乱“码”

数据库连接(直接用)

package com.sanqing.util; import java.sql.Connection; import java.sql.DriverMa...

19460
来自专栏黑泽君的专栏

day06_JDBC学习笔记

  JDBC:Java DataBase Connectivity,是SUN公司提供的一套操作数据库的标准规范(技术)。

9420
来自专栏码匠的流水账

聊聊spring cloud gateway的XForwardedHeadersFilter

本文主要研究spring cloud gateway的XForwardedHeadersFilter

20820
来自专栏浪淘沙

Spark工具包

11420
来自专栏用户2442861的专栏

Java对MySQL数据库进行连接、查询和修改

http://www.cnblogs.com/aniuer/archive/2012/09/10/2679241.html

10120
来自专栏一枝花算不算浪漫

[数据库操作]Java中的JDBC的使用方法.

30780

扫码关注云+社区

领取腾讯云代金券