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处理. ...
随机推荐
- Git - git push origin master 报错的解决方法
亲测实用,转载保存,原文地址:https://blog.csdn.net/kangvcar/article/details/72773904 错误提示如下: [root@linux1 php]# gi ...
- 解读Java8的Thread源码
1.创建的一个无参的Thread对象,默认会有一个线程名,以Thread-开头,从0开始计数,采用了一个static修饰的int变量,当对象初始化一次时一直存放在jvm方法区中 2.构造Thread的 ...
- laravel DB 类库
DB 类操作数据库 基本用法: DB::table('tableName'); 获取操作tableName 表 增加信息 对数据库中的某个表增加数据主要有两个函数可以 ...
- Python 匿名函数用法和return语句
匿名函数用法1.什么是匿名函数 函数定义过程中,没有给定名称函数,python中用lambda表达式创建匿名函数 lambda只是一个表达式,函数体比def简单 lambda主题是一 ...
- 微软商店打不开的教程(错误代码0x80131500)
1 打开win+R 输入`inetcpl.cpl` 2 点击高级 3 勾选上`使用TLS 1.2`或者点击还原默认设置就可以啦 4 然后就可以打开啦
- shell脚本训练
*注:shell中的/data目录为自创练习目录 1,编写脚本systeminfo.sh,显示当前主机系统信息.包括主机名,IPV4地址,操作系统版本,内核版本,cpu型号,内存大小,硬盘大小 结果: ...
- [atAGC045D]Lamps and Buttons
由于$p_{i}$是随机的,不断选择最小的.未被操作过的$i$并处理其所在的环一定是最优的,而这样与已知$p_{i}$的区别是,当选择了一个$i=p_{i}$,那么必然失败(而已知$p_{i}$时不会 ...
- 大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列
作者:韩信子@ShowMeAI,Joan@腾讯 地址:http://www.showmeai.tech/article-detail/tencent-ctr 声明:版权所有,转载请联系平台与作者并注明 ...
- watch异步操作
异步操作: 1.ajax, 2.定时器 3.点击事件 4.数据库操作 特点:代码不等待,后续代码会继续执行. watch:{ //watch作用监测已经存在的数据 newVal 新值,oldVal 旧 ...
- vue 数据单项绑定
提供get方法,修改数据不改原来数据,进行单向绑定,还可以做数据缓存,减少服务器压力. 提供单独的set方法.