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处理. ...
随机推荐
- Java多线程之Atomic:原子变量与原子类
Atomic简介 Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包,包含多个原子操作类这个包里面提供了一组原子变量类. 其基本的特性就是在多线程 ...
- 怎么将本地已有的一个项目上传到新建的git仓库的方法
将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种. 一. 克隆+拷贝 第一种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去.然后push到远程仓库上去即 ...
- mysql-5.7部署总从同步
主从部署方案: https://blog.csdn.net/mrbuffoon/article/details/103082295 主从数据库不同步处理方案: https://blog.csdn.ne ...
- Springboot 整合RabbitMq ,用心看完这一篇就够了
该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...
- Python进阶(装饰器)
from datetime import datetime def log(func):#func表示装饰器作用于的函数 def wrapper(*args,**kw):#wrapper返回装饰器作用 ...
- HTTPS-自己生成数字证书
一.获取证书的途径 自签名证书,适用于开发者测试HTTPS,最快速的途径就是生成自签名证书,非常方便. Let's Encrypt证书,可以使用免费CA机构签发的证书. 使用收费CA机构签发的证书,如 ...
- netcore项目中IStartupFilter使用
背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件.它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口.相当于去掉host,这样省掉了些指定 ...
- 【Microsoft Azure 的1024种玩法】一.一分钟快速上手搭建宝塔管理面板
简介 宝塔Linux面板是提升运维效率的服务器管理软件,其支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能.今天带大家一起学习的内容为一分钟快速上手搭建 ...
- [hdu6997]愿望幽灵
约定:$[x^{n}]F(x)$表示多项式$F$的$n$次项系数 对于多项式$F$,定义$F$的复合逆$\hat{F}$为满足$F( ...
- [cf720D]Slalom
对于每一行,这些障碍将其划分为若干段,记第$i$行($y=i$时)从左到右第$j$段为$[l_{i,j},r_{i,j}]$ 显然一条路径恰好经过每一行中的一段,且两种方案不同当且仅当其中经过的一段不 ...