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处理. ...
随机推荐
- Linux常用命令和快捷键整理:(2)常用快捷键
前言: Linux常用快捷键和基本命令整理,先上思维导图: linux常用命令请见:https://www.cnblogs.com/yinzuopu/p/15516499.html 基本快捷键的使用 ...
- elasticsearch在postman中创建复杂索引
body,所选类型为raw和JSON,写的代码为 { "settings":{ "number_of_shards":1, "number_of_re ...
- 2021 数字四川创新大赛WriteUp
数字四川初赛+复赛wp Web easyphp http://111.9.220.114:50006/.index.php.swp 备份文件泄漏 <?php #error_reporting(0 ...
- eclipse下的python环境安装
添加python开发环境到eclipse: 点击help--install New Software 点击add,弹出新窗口: Name:填PyDev Location:填 http://pyde ...
- [atAGC043B]123 Triangle
不妨先操作一轮,使得$0\le a_{i}\le 2$ 结论:若序列中存在1,则答案为0或1 考虑归纳,注意到若序列中存在1,除非所有元素均为1,否则操作一轮后必然仍存在1,那么根据归纳假设即成立,而 ...
- [atARC109F]1D Kingdom Builder
考虑最终有石子的位置的状态,判断一种状态是否可行 反过来,依次删除石子,删除条件是:当删除的石子是该段最后一个(即其两边都没有石子了),要求除其以外,每个连续段旁边的两个点都与其颜色不同 构造一种删除 ...
- Ubuntu下的磁盘管理
采用fat的磁盘存储,插入后采用相同命令会出现sdb和sdb1 sdb:磁盘 sdb1:磁盘分区标号为1 命令 df:显示磁盘使用情况 du:查询某个文件的大小读 du-h 或du -h --max- ...
- lilypond 进阶—— 用scheme画图
lilypond的许多底层设定是通过scheme语言写的,特别是要写函数的时候. 所以了解一下scheme的作用很重要. 不幸的是,不像lilypond本身的代码,scheme代码的结果是不会直接预览 ...
- 【JQuery】(1)JQuery基础
JQuery基础 2019-11-02 21:11:17 by冲冲 1.jQuery简介 jQuery:轻量级."写的少,做的多".JavaScript函数库. 2.jQuer ...
- Android连接远程数据库的避坑指南
Android连接远程数据库的避坑指南 今天用Android Studio连接数据库时候,写了个测试连接的按钮,然后连接的时候报错了,报错信息: 2021-09-07 22:45:20.433 705 ...