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 语句中的参数的值

Java PreparedStatement用法详解

PreparedStatement vs Statement

  • 代码的可读性和可维护性。

  • PreparedStatement 能最大可能提高性能:

    • DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。

    • 在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存。这样每执行一次都要对传入的语句编译一次。

    • (语法检查,语义检查,翻译成二进制命令,缓存)

  • PreparedStatement 可以防止 SQL 注入

插入案例

PreparedStatement常用的方法:

void setObject(int parameterIndex, Object x, int targetSqlType)

Java PreparedStatement用法详解

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)

Java PreparedStatement用法详解

执行操作:

Java PreparedStatement用法详解


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

执行结果:

Java PreparedStatement用法详解

PreparedStatement实现对表数据的增删改查操作

来源:https://blog.csdn.net/mofeigege/article/details/109459633

标签:Java,PreparedStatement
0
投稿

猜你喜欢

  • 简单了解springboot的jar包部署步骤

    2021-07-02 14:22:48
  • c#和java base64不一致的解决方法

    2022-11-24 02:18:55
  • DevExpress实现为TextEdit设置水印文字的方法

    2021-11-11 14:27:32
  • java图片识别文字的方法

    2021-11-11 02:43:03
  • C++ 二维(多维)vector添加一个空项问题

    2022-10-10 14:44:23
  • java实现点击按钮弹出新窗体功能

    2022-02-18 14:39:55
  • log4j2日志异步打印(实例讲解)

    2023-11-12 09:02:13
  • 将本地的jar包打到Maven的仓库中实例

    2022-08-29 13:38:28
  • Android中webview与JS交互、互调方法实例详解

    2023-04-30 19:18:27
  • 基于Android 实现图片平移、缩放、旋转同时进行

    2023-05-30 08:30:51
  • 基于SSM实现学生管理系统

    2023-11-24 18:17:39
  • Android Studio的安装及第一次启动时的配置问题

    2021-12-23 08:29:27
  • Android九宫格程序设计代码

    2022-05-04 13:11:49
  • Java内存模型详解

    2023-06-21 21:04:29
  • c#实现输出的字符靠右对齐的示例

    2023-02-26 12:23:39
  • Android 正则表达式验证手机号、姓名(包含少数民族)、身份证号

    2022-05-26 02:17:11
  • Eclipse自定义启动画面和图标的方法介绍

    2022-05-14 09:27:13
  • Android之禁止ViewPager滑动实现实例

    2022-03-17 23:55:40
  • 详解如何在Java中实现堆排序算法

    2023-11-11 11:34:46
  • IntelliJ IDEA如何设置JDK版本

    2022-08-27 07:46:03
  • asp之家 软件编程 m.aspxhome.com