JDBC

1,概念和本质

Java DataBase Connectivity Java 数据库链接, Java语言操作数据库

JDBC的本质:是一套操作所有关系型数据库的规则(接口)而JDBC所有的实现类,数据库驱动jar包,都由数据库的厂商自己实现。我们可以用这套接口进行编程,但真正执行的代码是驱动jar包的实现类。

## 2,快速入门
  • 步骤

  • 1,导入驱动jar包

    网上搜一下,记得注意版本,不同数据库的版本是不一样的!
  • 2,注册驱动

    Class.forName("com.mysql.jdbc.Driver");
  • 3,获取数据库链接对象 Connection

    • DriverManager类的静态方法getConnection获取Connection对象

    Connection connection = DriverManager.getConnection("jdbc:mysql://localgost(这里想主机名):3306(这里是端口号)/zhoupeng(数据库名)","root","root");
  • 4,定义sql语句

    String sql="update book set `bauthor`='南派三叔' where `bid`='b1'";

    这里sql语句后面不要加分号
  • 5,获取执行sql语句的对象 Statement

    • Connection对象调用createStatement方法,获取Statement对象

    Statement statement = connection.createStatement();
  • 6,执行sql,接受返回结果

    int i = statement.executeUpdate(sql);
  • 7,处理结果

    System.out.println(i==1?"操作成功":"操作失败");
  • 8,释放资源

    connection.close();
    statement.close();

2,对象详解

1,DriverManager :驱动管理对象

功能

  1. 驱动注册

    static void registerDriver(Driver driver)
            向 DriverManager 注册给定驱动程序。
    写代码使用:Class.forName("com.mysql.jdbc.Driver");

    通过查看源码可知,com.mysql.jdbc.Driver 这个类中存在静态代码块如下

    static {
          try {
              DriverManager.registerDriver(new Driver());
          } catch (SQLException var1) {
              throw new RuntimeException("Can't register driver!");
          }
      }

    这里我们就会发现,实际上注册驱动的,是 DriverManager.registerDriver(new Driver()) 这句代码,所以在代码中,实际上进行注册的是 DriverManager 这个类

    所以所谓的注册驱动,事实上是告诉程序,我们在使用哪个数据库

    注意:

    在mysql5之后的版本,这一步实际上是可以省略的!
  2. 获取数据库连接

    方法:

    static Connection getConnection(String url , String user , String password);

    参数:

    url:指定连接的路径

    语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
    例子:jdbc:mysql://localhost:3306/zhoupeng;

    这里说一下,如果连接的是本地mysql,并且mysql的默认端口号是3306,那么url可以简写为:
    jdbc:msyql:///数据库名;

    user:用户名

    password:密码

2,Connection :数据库连接对象

功能

  1. 获取执行sql对象

    Statement createStatement()

    PreparedStatement prepareStatement(String sql)
  2. 管理事务

    开始事务

    viod setAutoCommit(boolean autoCommit)   :调用该方法设置参数为false,即开启事务

    提交事务

    viod commit()

    回滚事务

     void rollback() 

3,Statement :执行sql对象

执行sql:

 int executeUpdate(String sql) ;

 执行DML(增删改)语句,DDL(对表和库的操作)语句

 但一般只用于DML语句

 这个返回值,表示的是影响行数!我们可以通过影响的行数,判断DML语句有没有执行成功
 ResultSet executeQuery(String sql) 

 执行DQL(select)语句

4,ResultSet :结果集对象,封装查询结果

方法:

    boolean next()      游标向下移动一行
判断当前这一行是否有数据,有数据返回true
没有数据返回false
getXxx(参数):获取数据
XXX:代表数据类型,,比如:int getInt()   String getString()
参数:
1, int : 代表列的编号,从1开始 如:getString(1)
2, String : 代表列的名称, 如: getInt("id")

遍历 ResultSet :

a1是 ResultSet 类型

for (; a1.next() ; ) {
  System.out.println(a1.getString(1)+"----"+a1.getString(2)+"----"+a1.getString(3)+"----"+a1.getString(4));
}

5,PreparedStatement :功能更加强大的执行sql对象

SQL注入问题:在拼接sql时,有一些特殊的关键字参与字符串的拼接,会造成安全性问题!

如:登录问题,,输入用户名随便,然后密码输入 a' or '1' = '1

此时的sql语句会形成:

select * from user where 账号='随便输入' and 密码 = 'a' or 'a' = 'a';

解决sql问题,使用PreparedStatement来解决

PreparedStatement会预编译sql,参数使用?作为占位符

步骤:

  • 步骤

  • 1,导入驱动jar包

  • 2,注册驱动

  • 3,获取数据库链接对象 Connection

  • 4,定义sql语句

    • 注意:使用参数?作为占位符,比如

    select * from user where `账号`=? and `密码` = ?;
  • 5,获取执行sql语句的对象 PreparedStatement

    • Connection对象调用prepareStatement方法,获取PreparedStatement对象

    PreparedStatement preparedStatement = c.prepareStatement(sql语句);
  • 6,给?赋值

    方法:sexXxx(参数1,参数2)

    参数1,是?的位置,从1开始
    参数2,是你要赋的值
  • 7,执行sql,接受返回结果

    int i = statement.executeUpdate(sql);

    ResultSet r = statement.executeQuery(sql);
  • 8,处理结果

    System.out.println(i==1?"操作成功":"操作失败");
  • 9,释放资源

注:后面基本都用的是PreparedStatement对象

两个好处:1,防止SQL注入

2,效率更高

JDBC的一些基础认识,写的不是特别完善,希望大家看的时候别太介意嘿嘿嘿的更多相关文章

  1. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  2. day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作

    复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...

  3. Jmeter使用基础笔记-写一个http请求

    前言 本篇文章主要讲述2个部分: 搭建一个简单的测试环境 用Jmeter发送一个简单的http请求 搭建测试环境 编写flask代码(我参考了开源项目HttpRunner的测试服务器),将如下的代码保 ...

  4. 老哥你能写篇 SpringCloud Alibaba 全家桶吗? 看视频太累 太枯燥了 !

    最喜欢的一句话: 1.01的365次方=37.78343433289 >>>1 0.99的365次方= 0.02551796445229, 每天进步一点点的目标,贵在坚持 前端时间有 ...

  5. Swift基础之OC文件调用Swift代码(在上次的基础上写的)

    前两天刚写过Swift调用OC,今天在原来的基础上,实现OC调用Swift. 首先,创建一个OneSwiftFile.swift文件,创建一个继承于NSObject的类(这个地方你可以自己选择继承的父 ...

  6. Python学习宝典,Python400集让你成为从零基础到手写神经网络的Python大神

    当您学完Python,你学到了什么? 开发网站! 或者, 基础语法要点.函数.面向对象编程.调试.IO编程.进程与线程.正则表达式... 当你学完Python,你可以干什么? 当程序员! 或者, 手写 ...

  7. JDBC一(web基础学习笔记七)

    一.JDBC Java数据库的连接技术(Java DataBase Connectivity),能实现Java程序以各种数据库的访问 由一组使用Java语言编写的类和接口(JDBC API)组成,它j ...

  8. Java基础之写文件——从多个缓冲区写(GatheringWrite)

    控制台程序,使用单个写操作将数据从多个缓冲区按顺序传输到文件,这称为集中写(GatheringWrite)操作.这个功能的优势是能够避免在将信息写入到文件中之前将信息复制到单个缓冲区中.从每个缓冲区写 ...

  9. Java基础之写文件——将素数写入文件中(PrimesToFile)

    控制台程序,计算素数.创建文件路径.写文件. import static java.lang.Math.ceil; import static java.lang.Math.sqrt; import ...

随机推荐

  1. 洛谷P4408 [NOI2003] 逃学的小孩 (树的直径)

    本题就是从c到a/b再到b/a距离的最大值,显然,a和b分别是树的直径的两个端点,先用两次dfs求出树的直径,再用一次dfs求出每个点到a的距离,最后再用一次dfs求出每个点到距离它较近的a/b的距离 ...

  2. Flutter Cocoon 已达到 SLSA 2 级标准的要求

    文/ Jesse Seales, Dart 和 Flutter 安全工作组工程师 今年年初,我们发布了 Flutter 2022 产品路线图,其中「基础设施建设」这部分提到:2022 年 Flutte ...

  3. Vue学习之--------深入理解Vuex、原理详解、实战应用(2022/9/1)

    @ 目录 1.概念 2.何时使用? 3.搭建vuex环境 3.1 创建文件:src/store/index.js 3.2 在main.js中创建vm时传入store配置项 4.基本使用 4.1.初始化 ...

  4. springboot+bootstrap实现图书商城管理(大三下学期课程设计)

    在csdn上记一次自己的课程设计过程(已经实习两个月了.感觉这个很容易做.支付可能需要多花点时间.): 在此框架基础之上权限认证管理设置成功:https://blog.csdn.net/weixin_ ...

  5. ssh登录提示hosts is down

    其他无用的网卡配置信息mv走重启network如果还是不行重启一下服务器问题就能解决

  6. 现代GPGPU 架构汇总

    本篇是GPGPU 架构汇总的总章,参考的是AMD公布OpenCL 手册,该手册总结了AMD. Nvdia 早年的GPGPU体系架构,以及Opencl 各个API 与硬件结构的映射关系.本篇除了整理这两 ...

  7. salesforce零基础学习(一百二十)快去迁移你的代码中的 Alert / Confirm 以及 Prompt吧

    本篇参考: https://developer.salesforce.com/blogs/2022/01/preparing-your-components-for-the-removal-of-al ...

  8. MySQL 是怎么加行级锁的?为什么一会是 next-key 锁,一会是间隙锁,一会又是记录锁?

    大家好,我是小林. 是不是很多人都对 MySQL 加行级锁的规则搞的迷迷糊糊,一会是 next-key 锁,一会是间隙锁,一会又是记录锁. 坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如 ...

  9. 这次,听人大教授讲讲分布式数据库的多级一致性|TDSQL 关键技术突破

    近年来,凭借高可扩展.高可用等技术特性,分布式数据库正在成为金融行业数字化转型的重要支撑.分布式数据库如何在不同的金融级应用场景下,在确保数据一致性的前提下,同时保障系统的高性能和高可扩展性,是分布式 ...

  10. 【Docker】容器使用规范--安全挂载建议

    容器挂载过程和安全挂载建议 绑定挂载 本文所提到的挂载主要指绑定挂载(bind mount),即通过-v /xx/xx:/xx/xx 和 --mount type=bind,xxx,xxx两种方式设置 ...