数据库 = JDBC,连接池对象

发布时间:2024-12-07 11:10

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介绍

===获取PreparedStatementAPI介绍

在 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数据库数据安全面面观

随便看看