JDBC的基本使用过程
引用JDBC相关的所有接口或者是抽象类的时候,必须导java.sql的包,方便后期的维护和管理
整体
1、加载驱动类:Class.forName()
2、获取数据库连接:DriverManager.getConnection()
3、创建SQL语句执行句柄:Connection.createStatement()
4、执行SQL语句:Statement.executeUpdate()
5、释放数据库连接资源:finally,Connection.close()
SQL执行句柄
定义SQL语句执行句柄:Statement对象
Statement对象,其实就是底层会基于Connection数据库连接
可以让我们方便的针对数据库中的表,执行增删改查的SQL语句
比如insert、udpate、delete和select语句
SQL注入#
如果使用Statement,那么就必须在SQL语句中,实际地去嵌入值,比如insert语句
但是这种方式有一个弊端,第一,是容易发生SQL注入,SQL注入,简单来说,就是,你的网页的用户在使用,
比如论坛的留言板,电商网站的评论页面,提交内容的时候,可以使用'1 or 1',诸如此类的
非法的字符,然后你的后台,如果在插入评论数据到表中的时候,如果使用Statement,就会原封不动的
将用户填写的内容拼接在SQL中,此时可能会发生对数据库的意外的损坏,甚至数据泄露,这种情况就叫做
SQL注入
第二种弊端,就是性能的低下,比如insert into test_user(name,age) values('张三',25)
insert into test_user(name,age) values('李四',26)
其实两条SQL语句的结构大同小异,但是如果使用这种方式,在MySQL中执行SQL语句的时候,却需要对
每一条SQL语句都实现编译,编译的耗时在整个SQL语句的执行耗时中占据了大部分的比例
所以,Statement会导致执行大量类似SQL语句的时候的,性能低下
如果使用PreparedStatement,那么就可以解决上述的两个问题
1、SQL注入,使用PreparedStatement时,是可以在SQL语句中,对值所在的位置使用?这种占位符的
使用占位符之后,实际的值,可以通过另外一份放在数组中的参数来代表。此时PreparedStatement会对
值做特殊的处理,往往特殊处理后,就会导致不法分子的恶意注入的SQL代码失效
2、提升性能,使用PreparedStatement之后,其实结构类似的SQL语句,都变成一样的了,因为值的地方
都会变成?,那么一条SQL语句,在MySQL中只会编译一次,后面的SQL语句过来,就直接拿编译后的执行计划
加上不同的参数直接执行,可以大大提升性能
作者:Zhbeii
出处:https://www.cnblogs.com/zhbeii/p/15749890.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?