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

JDBC指南

所谓的JDBC,就是使用Java代码来操作所有的关系型数据库。JDBC本质,是一组操作数据库的接口。各厂商实现的jar包就是驱动。

一、步骤

  1. 创建工程,倒入驱动jar包
  2. 注册驱动
    • Class.forName("com.mysql.jdbc.Driver");
  3. 获取连接
    • Connection conn = DriverManager.getConnection(url, username, password);
  4. 获取执行SQL对象
    • Statement stmt = conn.createStatement();
      • 获取普通执行SQL的对象
        • Statement createStatement()
      • 预编译SQL的执行SQL对象
        • PreparedStatement prepareStatement(sql)
      • 获取存储过程的对象
        • CalableStatement prepareCall(sql)
  5. 执行SQL
    • stmt.executeUpdate(sql);
  6. 处理返回结果
  7. 释放资源

Connection

事务管理

try {//开启事务conn.setAutoCommit(false);//执行sqlint count1 = stmt.executeUpdate(sql1);//处理结果System.out.println(count1);//执行sqlint count2 = stmt.executeUpdate(sql2);//处理结果System.out.println(coutn2);//提交事务conn.commit();
} catch(Exception throwables) {//回滚事务conn.rollback();throwables.printStackTrace();
}

Statement

  • Statement的作用
    • 执行SQL语句
      • int executeUpdate(sql)
        • 执行DML、DDL语句
        • 返回值
          • (1)DML语句的行数
          • (2)DLL语句执行完毕后,执行成功返回0
      • ResultSet executeQuery(sql)
        • 执行DQL语句
        • 返回值
          • ResultSet结果集对象

ResultSet

  • ResultSet stmt.executeQuery(sql)
    • 执行DQL语句,返回ResultSet对象
  • boolean next()
    • 将光标位置向前移动一行
    • 判断当前行是否有效
    • 返回值
      • true 有效行,当前行有数据
      • false 无效行,当前行没有数据
  • xxx getXxx(参数)
    • 获取数据
    • 参数
      • int 列的编号,从1开始
      • String 列的名字
  
//获取执行sql的对象
StatementStatement stetement = connection.createStatement();  //执行sql  
ResultSet resultSet = stetement.executeQuery(sql);  List<User> list = new ArrayList<>();  //处理结果  
while(resultSet.next()){  User user = new User();  //获取数据 getXxx(参数);  int id = resultSet.getInt("id");  String name = resultSet.getString("name");  int money = resultSet.getInt("money");  user.setId(id);  user.setName(name);  user.setMoney(money);  //存入集合  list.add(user);  
}
System.out.println(list);

PreparedStatement

  • PreparedStatement
    • 预编译SQL并执行(预防SQL注入问题)
  • SQL注入
    • 通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

SQL注入

通过输入来修改事先定义好的SQL语句
需求:完成用户登陆

select * from tb_user where username='zhangsan' and password = '123'; 

PreparedStatement

本质上是字符转义

一、获取PreparedStatement对象

//SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password=?";//通过Connection对象获取,并传入对于的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

二、设置参数值

PreparedStatement对象.setXxx(参数1, 参数2) 给?赋值
Xxx: 数据类型
参数:1. ?的位置编号,从1开始2. ?的值

三、执行SQL

executeUpdate(); 
or:
executeQuery();

不需要再传递sql语句,因为创建PreparedStatement对象时就已经传入了

预编译

/**  * PreparedStatement原理  * 预编译SQL,性能更高,需要手动开启预编译  * useServerPrepStmts=true  * 这样,检查SQL和编译SQL只会执行一次  */

数据库连接池

创建一个conn池,当用户访问完成数据库后,不是关闭,而是放回到池子里面,当下一个用户访问时,不需要重新建立一个

http://www.xdnf.cn/news/526825.html

相关文章:

  • 【线下沙龙】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!
  • [[春秋云境] Privilege仿真场景
  • ElasticSearch 8.x 快速上手并了解核心概念
  • 比较两个用于手写体识别的卷积神经网络(CNN)模型
  • PostgreSQL基本用法
  • 谷歌 NotebookLM 即将推出 Sparks 视频概览:Gemini 与 Deep Research 加持,可生成 1 - 3 分钟 AI 视频
  • 前缀和——和为K的子数组
  • 光纤克尔非线性效应及其在光通信系统中的补偿教程-3.2 克尔效应
  • 分布式与集群:概念、区别与协同
  • 没有 Mac,我如何用 Appuploader 完成 iOS App 上架
  • RabbitMQ的简介
  • React集成百度【JSAPI Three】教程(002):设置不同的环境效果
  • 数据结构(二) 线性表
  • java中的Servlet4.x详解
  • 湖北理元理律师事务所观察:债务服务中的“倾听者价值”
  • 深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务
  • APP小程序抓包和下游代理
  • 云原生攻防2(Docker基础补充)
  • 2.微服务-配置
  • Fines for Parking vs. Free News
  • 云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(下)
  • Kotlin 协程
  • MySQL故障排查
  • 高效掌握二分查找:从基础到进阶
  • LED太阳光模拟器与氙灯太阳光模拟器的性能区别
  • Protobuf协议生成和使用
  • 5G金融互联:迈向未来金融服务的极速与智能新时代
  • 判断三方库是64位还是32位
  • CVE-2015-3934 Fiyo CMS SQL注入
  • 代码随想录算法训练营Day37 | 完全背包基础理论 518. 零钱兑换II 377. 组合总和Ⅳ 57. 爬楼梯(第八期模拟笔试)