JDBC——PreparedStatement执行SQL的对象
Statement的子接口,预编译SQL,动态SQL
功能比爹强大
用来解决SQL注入的
预编译SQL:参数使用?作为占位符,执行SQL的时候给?赋上值就可以了
使用步骤:
1.导入驱动jar包
复制jar包,粘贴到libs文件夹下。文件名可以任意,一般就叫libs
选择复制的jar包,右键,点击Add As Library
2.注册驱动
3.获取数据库的连接对象 Connection(本地的java代码和数据库的桥梁对象)
4.定义SQL语句
①参数使用?作为占位符。例如:select * from user where username=? and password = ?;
5.获取执行SQL语句的对象 PreparedStatement Connection.prepareStatement(String sql)
6.给?赋值
7.执行SQL,接收返回结果,不需要传递SQL语句了(传递SQL语句时它父类Statement的方法,这个是子类特有的)
8.处理结果
9.释放资源
不使用Statement

prepareStatement(String sql)
创建参数化的SQL语句发送到数据库的 PreparedStatement对象。
SQL注入
SQL注入:通过操作输入来修改SQL语句
在上个练习中,会产生SQL注入问题
①用户名随便输
②密码输入

例如:


表中就没有那个用户名和密码
查看SQL语句执行效果:
(利用输入的bug,把输入的密码,转换为一个判断)
会把所有的用户名密码查询出来

解决上次练习的SQL注入
package cn.itcast.jdbc; import cn.itcast.util.JDBCUtils; import java.sql.*;
import java.util.Scanner; public class JdbcDemo11 { public static void main(String[] args) {
//1.键盘录入,接收用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine(); //2.调用方法login,因为不是静态方法,所以要创建对象
boolean flag = new JdbcDemo11().login2(username, password); //3.判断结果,输出同语句
if (flag){
System.out.println("登录成功");
}else {
System.out.println("登录失败,用户名或密码错误");
}
} /**
* 登录方法,PreparedStatement实现
*/
public boolean login2(String username, String password) {
if (username == null || password == null) {//如果有一个为空就不用去连接数据库,做操作
return false;
}
//连接数据库是否判断成功
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//1.获取数据库连接
conn = JDBCUtils.getConnection();
//2.定义SQL
String sql = "select * from user where username= ? and password = ?;";
//3.获取执行SQL的对象
pstmt = conn.prepareStatement(sql);
//给?赋值
pstmt.setString(1,username);
pstmt.setString(2,password); //4.执行查询,不需要传参数
rs = pstmt.executeQuery();
//5.判断
/* if (rs.next()){//不用这样写rs.next()返回的就是true,false
return true;
}else {
return false;
}*/
return rs.next();//如果有下一行返回true } catch (SQLException e) {
e.printStackTrace();
} finally {//释放资源
JDBCUtils.close(rs, pstmt, conn);
} return false;
}
}

JDBC——PreparedStatement执行SQL的对象的更多相关文章
- JDBC——Statement执行SQL语句的对象
Statement该对象用于执行静态SQL语句并返回它产生的结果.表示所有的参数在生成SQL的时候都是拼接好的,容易产生SQL注入的问题 PreparedStatement对象是一个预编译的SQL语句 ...
- Java JDBC下执行SQL的不同方式、参数化预编译防御
相关学习资料 http://zh.wikipedia.org/wiki/Java数据库连接 http://lavasoft.blog.51cto.com/62575/20588 http://blog ...
- JDBC中执行SQL语句的方式
一.执行DDL.DML语句 DDL.DML分别表示数据库定义语言.数据库操纵语言,操控这两种语言应该使用Statement对象的executeUpdate方法. 代码如下: public static ...
- JDBC进阶之PreparedStatement执行SQL语句(MySQL)
一.什么是PreparedStatement 参阅Java API文档,我们可以知道,PreparedStatement是Statement的子接口(如图所示),表示预编译的 SQ ...
- PreparedStatement执行sql語句
import com.loaderman.util.JdbcUtil; import java.sql.Connection; import java.sql.PreparedStatement; i ...
- JDBC方式执行SQL,支持CRUD返回LIST
背景: 用惯了Mybatis,接收一个老项目使用Hibernate,特别不习惯.新的功能需要系统后台定时执行任务,顾使用JDBC封装工具类执行 源代码 import java.sql.Connecti ...
- 使用预处理PreparedStatement执行Sql语句
/** * 使用预处理的方式执行Sql * @param sql Sql语句 * @param obj 变量值数组 * @return 查询结果 * @throws SQLException */ p ...
- jdbc批量执行SQL insert 操作
package com.file; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayLi ...
- 使用PreparedStatement执行SQL语句时占位符(?)的用法
1.Student数据库表 ID name gender 2.Java代码 public static void main(String[] args) { int _id=1; Str ...
随机推荐
- 这 100 道 Python 题,拿去刷!!!
2020年,学 Python 还有价值吗? 根据 2020 年 2 月的 TIOBE 编程语言排行榜显示,Python仍然稳居第三位. 此排行榜排名基于互联网上有经验的程序员. 课程和第三方厂商的数量 ...
- 避免js重复加载的问题
避免js重复加载的问题 在日常开发中,一个页面加载另一个页面的时候,就会把另一个页面的js也会加载进来,那么如何才能避免被加载页面不再重复加载已经加载过的js呢? 先上代码 动态加载js // 加载j ...
- css的核心原理分为优先级原则与继承原则两大部分
css原理:1.优先原则=>后解析的内容会覆盖之前解析的内容(所谓解析就是读取的css样式)2.继承原则=>嵌套里面的标签拥有外部标签的某些样式,子元素可以继承父元素的属性 1>优先 ...
- MySQL基础(6) | check约束
MySQL基础(6) | check约束 前言 在一些情况下,我们需要字段在指定范围的输入, 例如:性别只能输入 '男'或者'女',余额只能大于0等条件, 我们除了在程序上控制以外,我们还能使用 CH ...
- STL专题
一.algorithm 1.sort 问题1:给你n个整数,请按从大到小的顺序输出其中前m大的数. Input:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二 ...
- ArcGIS Runtime SDK for Android中SimpleFillSymbol.Style样式
SimpleFillSymbol.Style样式枚举共8种: 1.BACKWARD_DIAGONAL 反对角线填充 2.CROSS 交叉线填充 3.DIAGONAL_CROSS 前后对角线填充 4.F ...
- 并查集find,merge操作
一.find操作 //find操作路径压缩版 inline int find(int x){ if(fa[x]==x) return x; int t=find(fa[x]); fa[x]=t; re ...
- Java-利用位数猜年龄
题目: 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学.一次,他参加某个重要会议,年轻的脸孔引人注目.于是有人询问他的年龄,他回答说:“ ...
- 面向对象编程(什么是对象)——java
一.什么是面向对象,什么是面向过 二.引入对象和类的概念 对象:是具体事物 如:小明 汽车 类: 是对对象的抽象(抽象 抽出象的部分) Person 先有具体的对象,然后抽象各个对象之间的部分,归纳出 ...
- 51Nod 1183 编辑距离 (字符串相似算法)
编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除 ...
