数据库 = JDBC,连接池对象
SQL入门:理解关系型数据库,掌握SELECT语句,会使用SQLAlchemy或JDBC #生活技巧# #工作学习技巧# #编程语言学习路径#
PreparedStatement:解决sql语句注入问题,数据库连接池
一.PreparedStatement(1)问题
SQL注入问题
在用户输入的信息和SQL语句进行字符串拼接。用户输入的内容作为了SQL语句语法的一部分,改变了原有SQL真正的意义,以上问题称为SQL注入。
-- 这条sql语句原有的含义是根据用户名和密码查询
-- 现在用户输入了一些特殊字符,改变了sql原有的含义,这种行为称为sql注入
//比如:
//请输入用户名:
haha
//请输入密码:
a' or '2'='2
//问题分析:
// 代码中的SQL语句
"SELECT * FROM user WHERE name='" + name + "' AND password='" + password + "';";
// 将用户输入的账号密码拼接后
"SELECT * FROM user WHERE name='haha' AND password='a' or '1'='1';"
要解决SQL注入就不能让用户输入的密码和我们的SQL语句进行简单的字符串拼接,需要使用PreparedStatement类解决SQL注入。
(2)PreparedStatement
解决SQL注入问题:
我们就不能让用户输入的信息和SQL语句进行字符串拼接,需要使用PreparedStatement对象解决SQL注入。
SELECT * FROM USER WHERE username = ? AND password = ?
PreparedStatement基础语法:
String sql = "SELECT * FROM USER WHERE name = ? AND password = ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1,"admin'#");
pstmt.setString(2,"");
ResultSet resultSet = pstmt.executeQuery();
(3)优点
1. PreparedStatement() 会先将 SQL 语句发送给数据库预编译。 PreparedStatement 会引用着预编译后的结
果。可以多次传入不同的参数给 PreparedStatement 对象并执行。减少 SQL 编译次数,提高效率,提高性能。
2. 安全性更高,没有 SQL 注入的隐患。
3. 参数与sql分离,提高了程序的可读性
(4)PreparedStatement的Api介绍
===获取PreparedStatement的API介绍
在 java.sql.Connection 有获取 PreparedStatement 对象的方法
PreparedStatement PreparedStatement(String sql)
会先将 SQL 语句发送给数据库预编译。 PreparedStatement 对象会引用着预编译后的结果。
PreparedStatement 的 API 介绍
在 java.sql.PreparedStatement 中有设置 SQL 语句参数,和执行参数化的 SQL 语句的方法
void setDouble ( int parameterIndex , double x )
将指定参数设置为给定 Java double 值。
void setFloat ( int parameterIndex , float x )
将指定参数设置为给定 Java float 值。
void setInt ( int parameterIndex , int x )
将指定参数设置为给定 Java int 值。
void setLong(int parameterIndex, long x)
将指定参数设置为给定 Java long 值。
void setObject(int parameterIndex, Object x)
使用给定对象设置指定参数
网址:数据库 = JDBC,连接池对象 https://www.yuejiaxmz.com/news/view/405776
相关内容
数据库连接对象Connection对象的获取及相关知识总结达梦数据库
判断数据库连接状态
pdo连接mysql数据库(简洁明了)
数据库和生活有什么连接
大数据测试数据构造工具
【Java数据结构】字符串常量池
JDBC之——PreparedStatement实现对数据库的增删改操作
如何查看本地生活数据库
Oracle数据库数据安全面面观