【JAVA基础】- JAVA中JDBC详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【JAVA基础】- JAVA中JDBC详解

【JAVA基础】- JAVA中JDBC详解

好多年没有使用过JDBC直接对数据库进行操作,最近在做基于Windchill开发时,需要使用PTC封装好的JDBC中间件,复习一下JDBC基础知识。

一、JDBC简介

JDBC(JAVA DataBase Connectivity)JAVA连接数据库一个技术规范。具体就是通过JAVA连接广泛的数据库,并执行对数据库的操作。通过JDBC技术与各类型数据库进行交互,使用Java语句发送SQL到数据库总,可以实现更安全进行各类数据库操作。可以更安全、高效的完成对数据库各类操作。

JDBC是一种连接规范并不是实现类。此规范是有Sun公司提供一套完整的接口,各数据库厂商根据自身产品特点实现自己的产品类。具体的实现过程如下图类。

二、JDBC技术相关的接口

编号 接口 功能说明
1 Driver 驱动接口,定义建立链接方式
2 DriverManager 工具类,用于管理驱动,可以获取数据库的链接
3 Connection 表示Java与数据库建立的链接对象(接口)
4 PrepareStatement 发送SQL语句的工具
5 ResultSet 结构集,用于获取查询语句的结果

三、JDBC的编程步骤

JDBC操作数据一般分为以下六步:

1.加载驱动

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

2.获取链接

Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/cadastre","root","XXXXXX");

3.准备SQL以及发送SQL的工具

String sql="select * from datatables";

4.执行SQL

ResultSet resultSet = statement.executeQuery(sql);

5.处理结果集

while(resultSet.next()){
    String value= resultSet.getString("XXX");
}

6.释放资源

四、JDBC操作示例

  • PrepareStatement示例
public void testJdbc(){
   try {
       Class.forName("com.mysql.jdbc.Driver");
       String url="jdbc:mysql://127.0.0.1:3306/goyeerDB";
       String username = "username";
       String password = "password";
       Connection connection= DriverManager.getConnection(url,username,password);
       String sql="select * from xxxtable";
       PreparedStatement statement=connection.prepareStatement(sql);
       statement.executeUpdate();
    }catch (Exception ex){
    }
}
  • Statement示例
public void testStatement(){
    try {
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://127.0.0.1:3306/goyeerDB";
        String username = "username";
        String password = "password";
        Connection connection= DriverManager.getConnection(url,username,password);
        String sql="";
        Statement statement=connection.createStatement();
        statement.executeUpdate(sql);
    }catch (Exception ex){
    }
}

五、JDBC功能详解

1.DriverManager驱动管理对象

  • 注册驱动(MYSQL5之后直接忽略驱动)
  • 注册给定的驱动程序
static void registerDriver(Driver driver);
  • 写代码使用
Class.forName("com.mysql.jdbc.Driver");
  • com.mysql.jdbc.Driver类中存在静态代码块

2.Connection数据库连接对象

  1. connection类主要有两个作用:一是可以获取执行sql的对象,二是管理事务的功能;
  • 获取数据库连接对象:DriverManager.getConnection(数据库地址,用户名,密码);
  • 返回值:Connection数据库连接对象;

3.Statement执行SQL语句的对象

  • 获取执行者对象
  1. 获取普通执行者对象: Statement connection.createStatement0;
  2. 获取预编译执行者对象:PreparedStatement prepareStatement(String sql);
  • 管理事务
  1. 开启事务 : setAutoCommit(boolean autoCommit);参数为false,则开启事务
  2. 提交事务:commit();
  3. 回滚事务: rollback();
  • 释放对象
    立即将数据库连接对象释放:void close();
  • 执行DML语句:
    int executeUpdate(String sql);
    返回值int :返回影响的行数。
    参数sql:可以执行insert、update、delete语句
  • 执行DQL语句:
    ResultSet executeQuery(String sql);
    返回值ResultSet:封装查询的结果;
    参数sql:可以执行select语句;
  • 释放资源
    立即将数据库连接对象释放:void close();

4.ResultSet结果集对象

  • 判断结果集中是否还有数据:
    boolean next();有数据返回true,并将索引向下移动一行。没有数据返回false;
  • 获取结果集中的数据
  • resultSet.getBigDecimal();
  • resultSet.getInt();
  • resultSet.getShort();
  • resultSet.getBoolean();
  • resultSet.getString();
  • resultSet.getNString();
  • 释放资源
    立即将结果集对象释放:void close();


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
9月前
|
Java 开发者
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
341 0
|
5月前
|
存储 Java 程序员
Java 基础知识点全面梳理包含核心要点及难点解析 Java 基础知识点
本文档系统梳理了Java基础知识点,涵盖核心特性、语法基础、面向对象编程、数组字符串、集合框架、异常处理及应用实例,帮助初学者全面掌握Java入门知识,提升编程实践能力。附示例代码下载链接。
221 1
|
7月前
|
IDE Java 开发工具
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
1228 10
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
|
6月前
|
存储 安全 Java
2025 年最新 40 个 Java 基础核心知识点全面梳理一文掌握 Java 基础关键概念
本文系统梳理了Java编程的40个核心知识点,涵盖基础语法、面向对象、集合框架、异常处理、多线程、IO流、反射机制等关键领域。重点包括:JVM运行原理、基本数据类型、封装/继承/多态三大特性、集合类对比(ArrayList vs LinkedList、HashMap vs TreeMap)、异常分类及处理方式、线程创建与同步机制、IO流体系结构以及反射的应用场景。这些基础知识是Java开发的根基,掌握后能为后续框架学习和项目开发奠定坚实基础。文中还提供了代码资源获取方式,方便读者进一步实践学习。
1742 2
|
6月前
|
存储 安全 Java
Java 基础知识面试题汇总 最全面的 Java 基础面试题整理
本文全面解析Java基础知识面试题,涵盖Java基础概念、面向对象编程、异常处理、集合框架等核心内容。通过实际应用场景,提供技术方案与应用实例,如JDK与JRE区别、==与equals()差异、String类特性、final与static关键字用法、多继承替代方案及接口与抽象类对比。帮助开发者夯实基础,高效备考,提升实战能力。附带完整代码示例,可供下载学习。
777 3
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
596 2
|
9月前
|
SQL Java 中间件
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
|
9月前
|
设计模式 缓存 Java
重学Java基础篇—Java对象创建的7种核心方式详解
本文全面解析了Java中对象的创建方式,涵盖基础到高级技术。包括`new关键字`直接实例化、反射机制动态创建、克隆与反序列化复用对象,以及工厂方法和建造者模式等设计模式的应用。同时探讨了Spring IOC容器等框架级创建方式,并对比各类方法的适用场景与优缺点。此外,还深入分析了动态代理、Unsafe类等扩展知识及注意事项。最后总结最佳实践,建议根据业务需求选择合适方式,在灵活性与性能间取得平衡。
583 3
|
9月前
|
安全 IDE Java
重学Java基础篇—Java泛型深度使用指南
本内容系统介绍了Java泛型的核心价值、用法及高级技巧。首先阐述了泛型在**类型安全**与**代码复用**中的平衡作用,解决强制类型转换错误等问题。接着详细讲解了泛型类定义、方法实现、类型参数约束(如边界限定和多重边界)、通配符应用(PECS原则)以及类型擦除的应对策略。此外,还展示了泛型在通用DAO接口、事件总线等实际场景的应用,并总结了命名规范、边界控制等最佳实践。最后探讨了扩展知识,如通过反射获取泛型参数类型。合理运用泛型可大幅提升代码健壮性和可维护性,建议结合IDE工具和单元测试优化使用。
334 1
|
9月前
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
266 1