JDBC技术,使用PreparedStatement实现数据库的CRUD操作

8 篇文章 0 订阅

JDBC技术,使用PrepareStatement实现数据库的CRUD

使用Statement类操作数据库时需要拼接SQL语句,而拼接SQL语句极易引起SQL注入漏洞。

故使用PreparedStatement类替代Statement以避免SQL注入漏洞。

PreparedStatement采用预编译的方式解决SQL注入问题。

即预先写好SQL,而SQL中需要拼接,传入的参数均使用 ? 占位,之后将参数set为传入值。

步骤:

  1. 加载驱动
  2. 创建连接
  3. 为?赋值
  4. 执行SQL
  5. 如果是查询操作,需要解析ResultSet对象。

如:

// 设一创建好连接对象为connection
// ? 代替了需要拼接部分
String sql = "select id,name,age from student where id=?";
// 通过连接获取PreparedStatement对象
PreparedStatement ps = connection.prepareStatement(sql);
// 在执行语句之前将 ? 传入
ps.setObject(1, 1);// 第一个参数为对应?的下标(从1开始),第二个参数为要设置的值。
// 执行该语句,获取结果集对象。
ResultSet resultSet = ps.executeQuery();

PreparedStatement方法介绍

在使用connection.prepareStatement(sql)获取PreparedStatement对象时要传入sql语句

setXX() 设置参数

set方法
即通过下标设置占位符?对应位置的参数。(下标从1开始)

executeXX() 执行SQL语句

execute方法
即执行已传入的SQL,其中常用:

  • executeUpdate() 执行数据库更新语句(增删改)
  • executeQuery() 执行查询语句
  • executeBatch() 执行批量语句

getMetaData()获取结果集元数据对象

该方法返回一个ResultSetMetaData对象,通过该对象可获取该次查询结果集中的列名,列的别名,列数等信息请添加图片描述

ResultSetMetaData对象的常用方法:

  • getColumnLable(int column) 通过下标获取结果集中列的别名,下标从1开始(重要)
  • getColumnName(int column) 通过下标获取结果中列名
  • getColumnCount() 获取结果的列数。

示例代码:

PreparedStatement preparedStatement = connection.prepareStatement("select id, name userName from emp;");

// 获取查询结果的元数据。
ResultSetMetaData metaData = preparedStatement.getMetaData();
// 获取结果集中下标2的列名,即第二个列的列名
System.out.println(metaData.getColumnName(2));
// 获取结果集的列数,字段数
System.out.println(metaData.getColumnCount());
// 获取第二个列名的别名
System.out.println(metaData.getColumnLabel(2));

结果:
请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值