当前位置: 首页 > 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池,当用户访问完成数据库后,不是关闭,而是放回到池子里面,当下一个用户访问时,不需要重新建立一个

相关文章:

  • git仓库中.git 文件很大,怎么清理掉一部分
  • Git 使用全攻略:从入门到精通
  • buuctf RSA之旅
  • Linux中的DNS的安装与配置
  • 羽毛球订场小程序源码介绍
  • Spring Boot 的高级特性与经典的设计模式应用
  • 排序复习/上(C语言版)
  • C++--内存管理
  • (已解决:基于WSL2技术)Windows11家庭中文版(win11家庭版)如何配置和使用Docker Desktop
  • 新能源充电桩智慧管理系统:未来新能源汽车移动充电服务发展前景怎样?
  • 网络Tips20-007
  • 深入探讨Java中的上下文传递与ThreadLocal的局限性及Scoped Values的兴起
  • Comsol如何确定合适的研究输出时步?
  • 高校快递物流管理系统设计与实现(SpringBoot+MySQL)
  • 网络协议之一根网线就能连接两台电脑?
  • 软件架构风格系列(7):闭环控制架构
  • 如何使用GIT管理项目代码
  • 【LeetCode】大厂面试算法真题回忆(93)--优雅数组
  • MacOS安装软件后无法启动报错:“已损坏,无法打开,你应该将它移到废纸篓“
  • w~自动驾驶合集1
  • 瑞幸首度牵手成都国际非遗节,用一杯饮品将非遗之美推向全国
  • 和平会谈两天后,俄对乌发动冲突爆发以来最大规模无人机袭击
  • 乌称苏梅州一公共汽车遭俄军袭击,致9死4伤
  • 银行积分大幅贬值遭质疑,涉及工行、中行、农行等
  • 2000多年前的“新衣”长这样!马王堆文物研究新成果上新
  • 牛市早报|持续推进城市更新行动意见印发,证监会强化上市公司募资监管