Java PreparedStatement用法详解
作者:繁星*墨菲 发布时间:2023-08-08 20:20:51
PreparedStatement介绍
可以通过调用 Connection 对象的 prepareStatement(String sql) 方法获取
PreparedStatement 对象PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句
PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示(?在SQL中表示占位符),调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数. setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值
PreparedStatement vs Statement
代码的可读性和可维护性。
PreparedStatement 能最大可能提高性能:
DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。
在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存。这样每执行一次都要对传入的语句编译一次。
(语法检查,语义检查,翻译成二进制命令,缓存)
PreparedStatement 可以防止 SQL 注入
插入案例
PreparedStatement常用的方法:
void setObject(int parameterIndex, Object x, int targetSqlType)
parameterIndex the first parameter is 1, the second is 2, …占位符参数索引是从1开始的
其余也是如此:
void setInt(int parameterIndex, int x)
void setLong(int parameterIndex, long x)
void setString(int parameterIndex, String x)
void setBlob (int parameterIndex, Blob x)
void setDate(int parameterIndex, java.sql.Date x, Calendar cal)
执行操作:
package com.atmf;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import org.junit.Test;
public class SumUP {
@Test
public void getConnection() {
Connection con = null;
PreparedStatement ps = null;
try {
//1,加载配置文件
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pr = new Properties();
pr.load(is);
//2,读取配置信息
String user = pr.getProperty("user");
String password = pr.getProperty("password");
String url = pr.getProperty("url");
String driverClass = pr.getProperty("driverClass");
//3.加载驱动
Class.forName(driverClass);
//4,获取连接
con = DriverManager.getConnection(url, user,password);
String sql = "insert into customers(name,birth) value(?,?)";
//预编译sql语句,得到PreparedStatement对象
ps = con.prepareStatement(sql);
//5,填充占位符
ps.setString(1, "三明治");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2020-11-02");
ps.setDate(2, new java.sql.Date(date.getTime()));
//6,执行操作
ps.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//7,关闭资源
try {
if(ps != null)
ps.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(con != null)
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
配置信息:jdbc.properties文件
user=root
password=123456
url=jdbc:mysql://localhost:3306/students
driverClass=com.mysql.jdbc.Driver
执行结果:
PreparedStatement实现对表数据的增删改查操作
来源:https://blog.csdn.net/mofeigege/article/details/109459633


猜你喜欢
- 函数名称 说明ActiveKeyboardLayout 激活一个不同的键盘布局,该布局必须先由 LoadKeyBoardLayout函数装载
- json是种常用的数据传输格式,在android开发中,如何借助java语言实现对json数组对象的解析呢,请参阅下面的关键代码:impor
- PS:本文使用jdk1.7解析1.Object类 的equals 方法 /** &
- 一 . 得到这个对象的实例Connection con ;con = DriverManager.getConnection(url,use
- 四种隔离机制不要忘记:(1,2,4,8)1.read-uncommitted:能够去读那些没有提交的数据(允许脏读的存在)2.read-co
- 本文先为大家介绍如何利用缓存Cache方便地实现此功能。 Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局
- 1、修改application.properties新建 Mapper、实体类 相应的文件夹,将不同数据源的文件保存到对应的文件夹下# te
- Example官方介绍Query by Example (QBE) is a user-friendly querying techniqu
- 一、JDK中常见的异常情况1、常见异常总结图2、java中异常分类Throwable类有两个直接子类:(1)Exception:出现的问题是
- 关闭 IDEA 的自动检查更新(截图idea 2020 2.x)idea 右下角会有这样的更新提示2. 关闭 idea 自动检查更新取消勾选
- 前言:反射(Reflection)是.NET提供给开发者的一个强大工具,尽管作为.NET框架的使用者,很多时候不会用到反射。但在一些情况下,
- 这里是通过对回退键操作的阻断并重写实现:当按下回退键,弹出提示框选择是否退出,是则执行退出代码,否则什么都不做。在Mianactivity中
- 需要读取如图所示注册表【HKEY_LOCAL_MACHINE\SOFTWARE\EasyDrv7】节点下的【DateTime】的值直接上代码
- ArrayList和LinkedList区别、扩容机制及底层实现ArrayListArrayList的底层实现为数组存储在内存中,线程不同步
- 使用java语言用集合存储数据实现学生信息管理系统,在控制台上编译执行可以实现基本的学生信息增加、删除、修改、查询功能IO版可以参考我的另外
- 本文实例为大家分享了java实现银行家算法的具体代码,供大家参考,具体内容如下题目:初始时,Allocate[i,j]=0,表示初始时没有进
- Memcached 介绍Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据
- 在APP项目的开发过程中,经常会用到分享图片的功能,有时候还需要根据当前用户信息获取指定的分享图片,比如要求在用户分享图中显示用户名、Uid
- 快捷键辅助类 class HotKey { /// <summary> /// 如果函数执行成功,返回值不为0。 /// 如果函
- 1. 经过简化的Property 早些时候我们这样声明Property private string _myName; public str