2020-12-23

JDBC的一些笔记整理

  Java DataBase Connectivity ,即Java数据库连接,针对java对数据库进行操作时各大数据库厂商制定的一套标准接口,这套接口由各大数据库厂商进行了实现。

  使用步骤:

  1. 引入jar文件.
  2. 加载数据库驱动 (JavaSE项目中可以省略 , JavaWeb项目必须编写此步骤)
    Class.forName(“com.mysql.jdbc.Driver”);
  3. 通过驱动管理器, 获取JDBC连接对象.
    Connection conn = DriverManager.getConnection(“数据库连接地址”,“帐号”,“密码”);
    // 数据库连接地址格式: 主协议:子协议://ip地址:端口号/数据库名称
    // mysql的连接地址: jdbc:mysql://localhost:3306/java35
    // oracle的连接地址: jdbc:oracle:thin:@localhost:1521:ORCL
  4. 通过连接对象, 创建SQL执行对象 (SQL执行环境)
    Statement state = conn.createStatement();
  5. 通过SQL执行对象 ,执行SQL语句.
    state.execute(String sql语句);
  6. 释放资源
    state.close();
    conn.close();

  JDBC中常用的类型与方法

  1. DriverManager : 驱动管理器
    常用方法:
  • 获取数据库连接:
    static Connection getConnection(String 数据库地址,String 账号 ,String 密
    码)
  1. Connection : 数据库连接对象
    常用方法:
  • 创建SQL执行对象: Statement createStatement();
  1. Statement : SQL执行对象
    常用方法:
  • 执行SQL语句(查询语句返回true, 其它语句返回false)
    boolean execute(String sql);
  • 执行DML语句(INSERT UPDATE DELETE) 和 DDL语句(create alter drop)
    (返回int值, 表示语句对数据库表格的影响行数 !)
    (通常我们认为 返回值>0 表示执行成功.)
    int executeUpdate(String sql);
  • 执行DQL语句 (select)
    ResultSet executeQuery(String sql);
  1. ResultSet : 结果集对象 (指的是一个select语句的查询结果)
    常用方法:
    1. 控制游标移动的常用方法:
  • boolean next() ****
    作用: 控制游标向下一行移动.
    返回值: 移动成功返回true , 下一行不存在移动失败, 返回
    false
  • boolean privious() 了解
    作用: 控制游标向上一行移动.
    返回值: 移动成功返回true , 上一行不存在移动失败, 返回
    false
  • boolean absolute(int 行号) 了解
    作用: 控制游标向指定行移动
    返回值: 移动成功返回true , 行不存在移动失败, 返回false
  • boolean beforeFirst() 了解
    作用: 控制游标移动到第一行
    返回值: 移动成功返回true, 没有第一行数据返回false
  • boolean afterLast() 了解
    作用: 控制游标移动到最后一行
    返回值: 移动成功返回true, 没有最后一行数据返回false
  1. 获取游标指向行的字段值的常用方法:
  • XXX getXXX(String 列名) ***
    根据字段名, 得到此字段的值
  • XXX getXXX(int 字段的索引) *
    根据字段的索引, 得到字段的值 , 索引从1开始

DAO :database access object ,夹在业务逻辑与数据库资源中间。

  即是通过对数据库的访问操作设计的一个接口,这样的方式可以有效的抽象出需要的业务方法,当对数据库添加更多操作时,可以有效的利用dao层对象调用业务逻辑的方法。使得各功能的逻辑更加清晰,耦合度更低,代码复用性更高。

Sql注入问题

  在MySQL数据库中,当业务层使用的执行查询的sql语句出现歧义时,出现的不该发生的现象。
  使用JDBC对数据库连接后,我们要使用connection连接对象来,创建执行sql的执行对象。
  这时如果通过createStatement()方法进行创建,调用执行的sql方法时通过拼接字符串的操作。下面通过演示说明。

在这里插入图片描述
  当我们执行executeQuery()方法,进行数据库查询的操作时,如果密码传入的规则按照
在这里插入图片描述
  上图的操作进行拼接,就会使得sql语句成立,并查到了数据,导致了数据不安全。
  当时想了一下,如果以该方式输入任何一个已知账号,并通过拼接上面图片的字符串方式输入密码,那么任何人的账户都能登录了哈哈。
为了解决这个sql注入的问题,我们可以使用
在这里插入图片描述
  prepareStatement()方法来创建SQL执行对象,并在参数中使用查询的sql语句,通过对需要传递的sql语句关键字,进行参数化的处理,这时候,我们就可以避免sql注入的问题了。
  接着再对每个?的值进行设置,setString()中的两个参数,第一个表示sql语句的参数的索引位置,从1开始。第二个参数表示sql语句的参数的值。
  这时执行时不需要再传入sql语句了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值