JDBC(3):PreparedStatement对象介绍
一,PreparedStatement介绍
- PreperedStatement是Statement的子类,它的实例对象可以通过Connection.preparedStatement()方法获得,相对于Statement对象而言:PreperedStatement可以避免SQL注入的问题
- Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写
二,使用PreparedStatement对象完成对数据库的CRUD操作
注意:编写测试代码时要提前搭建好实验环境我的试验环境已经在我的博客【JDBC(二)---使用JDBC对数据库进行CRUD】中搭建完毕
测试代码
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class DemoTest1 {<span class="hljs-meta">@Test</span> <span class="hljs-comment">//插入</span>
public void insert(){
Connection connection=null;
PreparedStatement preparedStatement=null;
try {
//获取一个数据库连接
connection= Demo.getConnection();
//要执行的SQL命令,SQL中的参数使用?作为占位符
String sql="insert into abc(id,name,password) values(?,?,?)";
//通过conn对象获取负责执行SQL命令的prepareStatement对象
preparedStatement = connection.prepareStatement(sql);
//为SQL语句中的参数赋值
preparedStatement.setInt(1,1);//插入id=1
preparedStatement.setString(2,"钢铁侠");//插入name=钢铁侠
preparedStatement.setString(3,"123");//插入password=123
//执行插入操作,executeUpdate方法返回成功的条数
int i = preparedStatement.executeUpdate();
if(i>0){
System.out.println("插入成功!!!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
Demo.release(connection,preparedStatement,null);
}
}<span class="hljs-meta">@Test</span> <span class="hljs-comment">//删除</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">delete</span><span class="hljs-params">()</span></span>{
Connection connection=<span class="hljs-keyword">null</span>;
PreparedStatement preparedStatement=<span class="hljs-keyword">null</span>;
<span class="hljs-keyword">try</span> {
connection = Demo.getConnection();
<span class="hljs-comment">//当id=?时 删除这一行</span>
String sql=<span class="hljs-string">"delete from abc where id=?"</span>;
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(<span class="hljs-number">1</span>,<span class="hljs-number">1</span>);
<span class="hljs-keyword">int</span> i = preparedStatement.executeUpdate();
<span class="hljs-keyword">if</span>(i><span class="hljs-number">0</span>){
System.out.println(<span class="hljs-string">"删除成功!!!"</span>);
}
} <span class="hljs-keyword">catch</span> (SQLException e) {
e.printStackTrace();
}<span class="hljs-keyword">finally</span> {
Demo.release(connection,preparedStatement,<span class="hljs-keyword">null</span>);
}
} <span class="hljs-meta">@Test</span> <span class="hljs-comment">//更新</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">update</span><span class="hljs-params">()</span></span>{
Connection connection=<span class="hljs-keyword">null</span>;
PreparedStatement preparedStatement=<span class="hljs-keyword">null</span>;
ResultSet resultSet=<span class="hljs-keyword">null</span>;
<span class="hljs-keyword">try</span> {
connection= Demo.getConnection();
<span class="hljs-comment">//当id=?时 更新name和password的数据</span>
String sql=<span class="hljs-string">"update abc set name=?,password=? where id=?"</span>;
preparedStatement= connection.prepareStatement(sql);
preparedStatement.setString(<span class="hljs-number">1</span>,<span class="hljs-string">"蜘蛛侠"</span>);
preparedStatement.setString(<span class="hljs-number">2</span>,<span class="hljs-string">"567"</span>);
preparedStatement.setInt(<span class="hljs-number">3</span>,<span class="hljs-number">1</span>);
<span class="hljs-keyword">int</span> i = preparedStatement.executeUpdate();
<span class="hljs-keyword">if</span>(i><span class="hljs-number">0</span>){
System.out.println(<span class="hljs-string">"更新成功"</span>);
}
} <span class="hljs-keyword">catch</span> (SQLException e) {
e.printStackTrace();
}<span class="hljs-keyword">finally</span> {
Demo.release(connection,preparedStatement,<span class="hljs-keyword">null</span>);
}
} <span class="hljs-meta">@Test</span> <span class="hljs-comment">//查找</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">find</span><span class="hljs-params">()</span></span>{
Connection connection=<span class="hljs-keyword">null</span>;
PreparedStatement preparedStatement=<span class="hljs-keyword">null</span>;
ResultSet resultSet=<span class="hljs-keyword">null</span>;
<span class="hljs-keyword">try</span> {
connection= Demo.getConnection();
<span class="hljs-comment">//当id=?时 查询这个一列</span>
String sql=<span class="hljs-string">"select * from abc where id=?"</span>;
preparedStatement= connection.prepareStatement(sql);
preparedStatement.setInt(<span class="hljs-number">1</span>,<span class="hljs-number">1</span>);
resultSet = preparedStatement.executeQuery();
<span class="hljs-keyword">if</span>(resultSet.next()){
<span class="hljs-comment">//查询这一列的name </span>
System.out.println(resultSet.getString(<span class="hljs-string">"name"</span>));
}
} <span class="hljs-keyword">catch</span> (SQLException e) {
e.printStackTrace();
}<span class="hljs-keyword">finally</span> {
Demo.release(connection,preparedStatement,resultSet);
} }
}
JDBC(3):PreparedStatement对象介绍的更多相关文章
- JDBC中常用对象介绍
JDBC中的主要类(接口) 在JDBC中常用的类有: 1.DriverManager 2.Connection 3.Statement 4.ResultSet 1.DriverManager 其实我们 ...
- jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程
一. java.sql.* 和 javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, p ...
- day17(JDBC入门&jdbcUtils工具介绍)
day17 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中url ...
- JDBC之PreparedStatement
JDBC之PreparedStatement 一.java.sql.PreparedStatement接口简介 该接口表示预编译的 SQL 语句的对象. SQL 语句被预编译并存储在 Prepared ...
- java基础 JDBC & Statement & PreparedStatement
参考文章: http://blog.csdn.net/wang379275614/article/details/23393335 概念 JDBC-数据库连接,是由一些类和接口构成的API,是J2SE ...
- JDBC相关的类介绍
JDBC 背景:1996年,Sun公司推出了Java数据库连接(Java Database Connectivity JDBC)工具包的第一个版本.该工具包使得程序员可以使用结构化语言SQL连接到一个 ...
- 转自“脚本之家”!!JDBC之PreparedStatement类中预编译的综合应用解析
JDK 文档:SQL 语句被预编译并存储在 PreparedStatement 对象中(PreparedStatement是存储在JDBC里的,初始化后,缓存到了JDBC里),然后可以使用此对象多次高 ...
- Java学习笔记——JDBC之PreparedStatement类中“预编译”的综合应用
预编译 SQL 语句被预编译并存储在 PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句. 预编译的优点 1.PreparedStatement是预编译的,对于批量处理 ...
- java中使用JDBC的preparedStatement批处理数据的添加
在项目中我们偶尔可能会遇到批量向数据库中导入数据,如果批处理的情况较多的情况下可以使用spring batch,如果只是一个导入功能的话可以考虑使用jdbc的preparedStatement处理. ...
随机推荐
- $router 和 $route的区别
router router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局对象,他包含了所有的路 ...
- redis异常:(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.
(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on d ...
- 第二周PTA笔记 均等笔+旋转骰子+两个日期相差天数
均等笔 n个人围成一圈,每人有ai支笔.每人可以向左右相邻的人传递笔,每人每次传递一支笔消耗的能量为1.求使所有人获得均等数量的笔的最小能量. 输入格式: 第一行一个整数n ,表示人的个数(30%的数 ...
- Databend 设计概述 | 白皮书
Databend 是一个开源的.完全面向云架构的新式数仓,它提供快速的弹性扩展能力,并结合云的弹性.简单性和低成本,使 Data Cloud 构建变得更加容易. Databend 把数据存储在像 AW ...
- psutil模块详解
import psutil#1.系统性能信息模块psutilmem = psutil.virtual_memory()print(mem)#svmem(total=8442675200, availa ...
- 在 Kubernetes 上安装 Gitlab CI Runner Gitlab CI 基本概念以及 Runner 的安装
简介 从 Gitlab 8.0 开始,Gitlab CI 就已经集成在 Gitlab 中,我们只要在项目中添加一个.gitlab-ci.yml文件,然后添加一个Runner,即可进行持续集成.在介绍 ...
- [hdu7023]Yet Another Matrix Problem
关于$f(x)$的条件,将$C=A\times B$代入,即$\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{k=1}^{r}A_{i,k}B_{k,j}=x$ 调换枚举顺序,即$ ...
- [hdu7082]Pty loves lcm
先将问题差分,即仅考虑上限$R$(和$L-1$) 注意到$f(x,y)$增长是较快的,对其分类讨论: 1.若$y\ge x+2$,此时满足$f(x,y)\le 10^{18}$的$(x,y)$只有约$ ...
- 网络协议之:一定要大写的SOCKS
目录 简介 SOCKS的故事 SOCKS的历史 SOCKS协议的具体内容 SOCKS4 SOCKS4a SOCKS5 总结 简介 很久很久以前,人们还穿的是草鞋,草鞋虽然穿着舒服,但是不够美观.然后人 ...
- Swift-技巧(九)CGImage To CVPixelBuffer
摘要 iOS 中图像的表现形式不只是 Image,还有更加底层的方式,比如 CVPixelBuffer 像素缓存形式,那么 CGImage 就可以转换为像素缓存的方式也是需要了解的. CGImage ...