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

JDBC编程笔记

文章目录

    • 1. 通过代码操作数据库的基本流程
    • 2. JDBC的定义与作用
    • 3. 驱动与第三方库
    • 4. JDBC操作数据库的标准步骤
    • 5. JDBC的局限与框架的出现
    • 6. 总结
      • 代码示例总结

1. 通过代码操作数据库的基本流程

  • 实际开发中,数据库操作很少直接用命令行或图形化客户端。
  • 更多场景是通过代码(C++、Java、Python、Go等)进行数据库操作。
  • 前提:数据库需提供API供程序调用,这些API通常被封装成“库”。
  • Java有自己的API标准,各数据库需将自身API适配成Java标准API(即JDBC)。

2. JDBC的定义与作用

  • JDBC(Java Database Connectivity)是Java访问数据库的标准API。
  • 各数据库需提供兼容JDBC的驱动(如MySQL的mysql-connector)。
  • 使用JDBC,开发者只需学习一套API即可操作多种数据库。

3. 驱动与第三方库

  • 数据库厂商会提供JDBC驱动(如MySQL的mysql-connector.jar)。
  • 这些驱动通常以.jar文件形式提供,需要手动下载并导入项目(如通过Maven中央仓库)。

4. JDBC操作数据库的标准步骤

  1. 创建数据源

    • 通过MysqlDataSource等设置数据库连接信息(URL、用户名、密码)。

    • 例如:

      MysqlDataSource dataSource = new MysqlDataSource();
      dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/exercise?characterEncoding=utf8&useSSL=false");
      dataSource.setUser("root");
      dataSource.setPassword("aa1234");
      
  2. 建立连接

    • 调用dataSource.getConnection()获取数据库连接对象。
  3. 构造SQL语句

    • 推荐使用PreparedStatement预编译SQL,提升效率并防止SQL注入。

    • 例如:

      String sql = "insert into student(name) values(?)";
      PreparedStatement statement = connection.prepareStatement(sql);
      statement.setString(1, name);
      
  4. 执行SQL语句

    • 查询用executeQuery(),增删改用executeUpdate()
  5. 处理结果

    • 查询结果通过ResultSet遍历处理。

    • 例如:

      while (resultSet.next()) {System.out.println(resultSet.getInt("id"));System.out.println(resultSet.getString("name"));
      }
      
  6. 释放资源

    • 按照创建顺序的逆序关闭ResultSetStatementConnection等资源。

5. JDBC的局限与框架的出现

  • 直接使用JDBC编写代码繁琐、重复度高,容易出错。
  • 为简化开发,出现了如MyBatis等基于JDBC的ORM框架,对JDBC进行封装和简化。
  • 这些框架主要解决“通用场景”,但对于某些特殊需求,仍需开发者具备底层JDBC操作能力,对框架进行定制或扩展。

6. 总结

  • 框架的本质是为了解决通用问题,提高开发效率。
  • 但开发者仍需掌握底层原理和操作,才能在遇到特殊场景时灵活应对。

代码示例总结

// 1. 创建数据源
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/exercise?characterEncoding=utf8&useSSL=false");
dataSource.setUser("root");
dataSource.setPassword("aa1234");// 2. 建立连接
Connection connection = dataSource.getConnection();// 3. 构建SQL
String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);// 4. 执行SQL
ResultSet resultSet = statement.executeQuery();// 5. 遍历结果集
while (resultSet.next()) {System.out.println(resultSet.getInt("id"));System.out.println(resultSet.getString("name"));
}// 6. 关闭资源
resultSet.close();
statement.close();
connection.close();
http://www.dtcms.com/a/305477.html

相关文章:

  • 创建型设计模式-Builder
  • Git链接备用手册
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博内容IP地图可视化分析实现
  • 《设计模式之禅》笔记摘录 - 11.策略模式
  • 15 - 多模态大语言模型 — 图文 “牵线” 系统 “成长记”:借 CLIP 练本领,从图像与文字里精准 “搭鹊桥” 的全过程 (呆瓜版 - 2 号)
  • Java源码构建智能名片小程序
  • 短剧小程序系统开发:重塑影视内容消费格局
  • 北京理工大学医工交叉教学实践分享(1)|如何以实践破解数据挖掘教学痛点
  • 招工招聘小程序系统开发——打造一站式招聘服务平台
  • DISTILLM:迈向大型语言模型的简化蒸馏方法
  • 基于动态权重-二维云模型的川藏铁路桥梁施工风险评估MATLAB代码
  • [硬件电路-106]:模拟电路 - 电路为什么会出现不同的频率特性?元件频率依赖性、信号传输路径、电路拓扑结构、外部因素
  • 新手向:DeepSeek 部署中的常见问题及解决方案
  • C语言:函数指针、二级指针、常量指针常量、野指针
  • 域名https证书
  • 【动态规划算法】斐波那契数列模型
  • 深入理解PostgreSQL的MVCC机制
  • webpack-性能优化
  • 告别内存泄漏:你的Rust语言30天征服计划
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | 3dBackgroundBoxes(3D背景盒子组件)
  • Prometheus-2--什么是Exporter是什么?
  • STM32F1 Flash的操作
  • 【学习过程记录】【czsc】1、安装
  • 【Qt开发】信号与槽(三)-> 自定义信号和槽
  • QT---》文件MD5码的获取与验证
  • 关于vue __VUE_HMR_RUNTIME__ is not defined报错处理
  • Baumer工业相机堡盟工业相机如何通过YoloV8的深度学习模型实现汽车牌照的位置识别(C#代码,UI界面版)
  • Web前端实战:Vue工程化+ElementPlus
  • 前端兼容性问题全面解决方案
  • 重生之我在暑假学习微服务第五天《Docker部署项目篇》