当前位置: 首页 > news >正文

JDBC常用的接口

一、什么是JDBC

   JDBC是Java语言连接数据库的接口规范。

 

二、JDBC的体系

  1、Java官方提供一个操作数据库的抽象接口

    抽象接口有很多的接口和抽象类。

   例如:Driver、Connection、Statement。

 

   2、各个数据库厂商提供各自的Java实现类

    需要各自实现具体的细节。

    例如:设计怎么和数据库服务器通信?如何传递SQL语句?如何传递执行结果?

 

三、JDBC官方常用接口

  JDBC的接口所在的包是:  java.sql.*

 

 (一)加载驱动实现类

        主要目的是指定程序当前要和哪一种数据库通信。

 

   1、基础知识

   驱动类的抽象类是:

java.sql.Driver。

   MySQL厂商的实现类是:

com.mysql.jdbc.Driver

 

  2、把含有实现类的jar包放入类路径

       需要从那些数据库厂商的官网下载jar文件,放入项目的类路径下。

        驱动jar文件名字类似"mysql-connection-java-xxx.jar"。

 

   3、加载驱动实现类的方法

   第一种:

    调用java.sql.DriverManager类的下列方法

public static void  registerDriver(Driver 驱动对象)

(以MySQL为案例):

// 构建驱动实现类的对象

Driver  temp = new com.mysql.jdbc.Driver();

 

// 注册到驱动管理器中

DriverManager.registerDriver(temp);

 

 第二种:

  用类对象的反射加载。

  调用Class类的下列静态方法:

public static Class forName("类的包名.类名")

(以MySQL为案例):

// 加载驱动类

Class.forName("com.mysql.jdbc.Driver")

 

 (二)获得连接对象

   Java程序和数据库通信,需要一个连接对象。

   连接对象的类:

java.sql.Connection

  如何获得连接对象:

  1、准备三个信息:

   连接的URL地址:描述数据库在哪台计算机上。

   数据库账号名:代表用哪个账号连接。

   账号的密码:用密码来验证当前程序是不是拥有账号的所有权。

 

 2、调用DriverManager类的下列方法

public static Connection getConnection(

   String 地址, 

   String 账号, 

   String  密码

)

  MySQL的案例:

  假设数据库路径是 "jdbc:mysql://127.0.0.1:6666",用户名是"root",密码是"123"。

Connection con = DriverManager.getConnection(

      "jdbc:mysql://127.0.0.1:6666",

      "root",

      "123");

 说明:

    数据库的连接路径规则是

jdbc:数据库类型名字:数据库IP地址或者域名:端口[/默认数据库]

   MySQL数据库的类型是"mysql"。

   后面可以不接默认数据库。

   案例:

// 假设在IP地址是192.168.4.121的计算机上,有一个监听在3306端口的MySQL服务器,它的连接路径如下:

 

jdbc:mysql://192.168.4.121:3306

 

 连接对象的其他方法:

// 设置是否开启自动事务提交

void setAutoCommit(boolean 值)

 

// 设置保存点

Savepoint setSavePoint()

 

// 手动提交事务

void commit()

 

// 回滚事务

void rollback()

 

// 回滚到指定的保存点

void rollback(Savepoint 保存点)

 

  (三)创建语句对象

   语句对象是为了执行具体的SQL语句。

   1、语句类的路径:

java.sql.Statement

  2、如何获得语句对象:

  调用Connection类型的对象的下列方法:

public Statement createStatement()

案例:

Statement state = con.createStatement();

 

  3、主要的方法

   1)用于执行一般的SQL语句:

// 执行SQL语句

boolean  execute(String  SQL语句)

   返回值:

       true  :  结果是ResultSet结果集对象。

       false :  结果是更新的行数,或者没有结果。

 

    相关方法:

// 如果execute执行返回true,需要下列方法获取结果集:

ResultSet  getResultSet()

 

// 如果execute执行返回false,需要下列方法获取更新的记录行数:

int  getUpdateCount()

 

  2)用于专门的查询

       返回一个ResultSet结果集对象,适合select语句。

  方法如下:

ResultSet  executeQuery(String SQL语句)

  案例:

// 查询user数据表的所有记录

ResultSet  rs =  state.executeQuery("select  *  from user");

 

 3)专门的更新操作

     返回本次更新的记录行数,适合insert、update、delete三种语句。

     方法如下:

int  executeUpdate(String SQL语句)

  案例:

// 删除user数据表的id为255的记录

int count =  state.executeUpdate("delete    from user where id = '255' ");

 

// 打印删除的记录行数

System.out.println("本次执行删除记录个数:"  + count);

 

 (四)处理结果集

       结果集是把查询的记录放到一个列表集合里,从上到下依次获取。

   结果集类:

java.sql.ResultSet

   主要方法:

   1、跳转行记录

  行号从1开始编号。

// 跳转到指定的行,成功返回true

boolean  absolute(int  行号)

 

// 跳转到第一行,成功返回true

boolean first()

 

// 跳转到最后一行,成功返回true

boolean last()

 

// 跳转到前一行,成功返回true

boolean previous()

 

// 跳转到下一行,成功返回true

boolean next()

 

 2、获得一行的字段值

       JDBC为每种类型都提供了对应的get方法,方便匹配字段值的类型。

   例如: getInt() getFloat() getDouble() getLong() getSring() getTime() getDate()。

 

  第一种:用字段名获取

   以获取String类型为例:

String  getString(String  字段名)

  获取字段名是id的值:

String value = rs.getString("id");

 

 第二种:用字段值所在的列号获取

  列是从1开始编号。

  1代表第一列,2代表第二列。

 以获取String类型为例:

String  getString(int 列号)

 获取第2列的值:

String value = rs.getString(2);

 

3、实际的处理逻辑

// 获取结果集对象

ResultSet rs = state.executeUpdate("SQL语句");

 

// 循环处理,有下一行就继续循环

while(rs.next()){

    // 用get方法获得当前行的字段

}

 

// 关闭结果集

rs.close();

 

四、注意事项

  1、连接用完后及时调用close()方法关闭。

  2、结果集获取字段值的方法要和返回的类型匹配。

  3、账号权限设计合理,不能获取最高权限。

 

http://www.dtcms.com/a/109003.html

相关文章:

  • coding ability 展开第八幕(位运算——基础篇)超详细!!!!
  • Spring Boot 集成 Redis 对哈希数据的详细操作示例,涵盖不同结构类型(基础类型、对象、嵌套结构)的完整代码及注释
  • PyQt6实例_A股日数据维护工具_使用
  • OpenCV 引擎:驱动实时应用开发的科技狂飙
  • 操作系统(一):概念及主流系统全分析
  • 大模型学习三:DeepSeek R1蒸馏模型组ollama调用流程
  • Vue2 生命周期
  • Adam vs SGD vs RMSProp:PyTorch优化器选择
  • 美关税加征下,Odoo免费开源ERP如何助企业破局?
  • 【无标题 langsmith
  • DNS域名解析过程 + 安全 / 性能优化方向
  • 在线下载国内外各种常见视频网站视频的网页端工具
  • frp 让服务器远程调用本地的服务(比如你的java 8080项目)
  • AIGC7——AIGC驱动的视听内容定制化革命:从Sora到商业化落地
  • S3C2410 的总线架构
  • OpenCV 图形API(11)对图像进行掩码操作的函数mask()
  • RK3568 gpio模拟i2c 配置hym8563 RTC时钟
  • 19c21c单机/RAC手工清理标准化文档
  • 中小企业数字化转型的本质:在Websoft9应用平台上实现开源工具与商业软件的统一
  • GitHub 趋势日报 (2025年04月02日)
  • 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2章 Java内存区域与内存溢出异常
  • springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式
  • 【PHP】PHP网站常见一些安全漏洞及防御方法
  • DM数据库配置归档模式的两种方式
  • NOA是什么?国内自动驾驶技术的现状是怎么样的?
  • 清晰易懂的 Flutter 卸载和清理教程
  • 漫威蜘蛛侠2(Marvel‘s Spider-Man 2)
  • 算法复杂度:从理论到实战的全面解析
  • 电脑文件怎么压缩打包发送?
  • AI大模型重构医药流通供应链:传统IT顾问的转型指南