注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接:

package day03.prepare;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import util.JdbcUtil; /**
* 关于preparedStatement的案例
* 因为PreparedStatement是继承自statement的;
* 同样preparedStatement也可以执行statement中的方法,那些直接拼接,或者直接输入值的
* 但是这样预编译就没有作用了
*
*
* @author mzy
*
*/
public class Demo01 {
public static void main(String[] args) {
// insert(); // update(); // delete(); select();
} private static void select() {
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
// 准备sql
String sql = "select * from student where id = ?";
try {
// 获取连接
conn = JdbcUtil.getConnection(); pstmt = conn.prepareStatement(sql); // 预编译的作用就是权限和sql语法的检查 pstmt.setInt(1, 10); // id rs = pstmt.executeQuery(); while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id+", "+name+", "+age);
} } catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs, pstmt, conn); // 关闭Statement的,也支持关闭PreparedStatement
}
} private static void delete() {
// 同 update、insert
} private static void update() {
PreparedStatement pstmt = null;
Connection conn = null;
// 准备sql
/*
* MySQLSyntaxErrorException
* String sql = "update ? set name = '乘成' where id = ?";
*
* 注意:在预编译的时候,只允许用 ? 占位的地方为参数值(即:等号后面的内容等)
* 不能是表名或者其他关键字,不然就会出现:MySQLSyntaxErrorException异常
* 此异常就是代表sql语句有错,在预编译的时候抛出(预编译的作用就是检测语法和权限)
* 理解了预编译的检测语法作用,就知道该传入什么样的参数了。
*/
String sql = "update student set name = '乘成' where id = ?";
try {
// 获取连接
conn = JdbcUtil.getConnection();
// 是connection去prepare一个Statement 给我们的PreparedStatement
// 和我们的statement不同,这个prepare的时候是预编译,就要把sql传进去了
// 其中的? 作为占位符
pstmt = conn.prepareStatement(sql); // 预编译的作用就是权限和sql语法的检查
// 在预编译之后,需要执行之前给参数赋值,放在pstmt中
/*
* 参数一:位置(从1开始)
* 参数二:具体的参数值
*/
pstmt.setInt(1, 2); // id // 传入参数之后,再进行执行
int count = pstmt.executeUpdate();
System.out.println(count+"行受影响"); } catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(pstmt, conn); // 关闭Statement的,也支持关闭PreparedStatement
// 因为 Statement是 PreparedStatement的子类
}
} private static void insert() {
PreparedStatement pstmt = null;
Connection conn = null;
// 准备sql
String sql = "insert into student value(?, ?, ?)";
try {
// 获取连接
conn = JdbcUtil.getConnection();
// 是connection去prepare一个Statement 给我们的PreparedStatement
// 和我们的statement不同,这个prepare的时候是预编译,就要把sql传进去了
// 其中的? 作为占位符
pstmt = conn.prepareStatement(sql); // 预编译的作用就是权限和sql语法的检查
// 在预编译之后,需要执行之前给参数赋值,放在pstmt中
/*
* 参数一:位置(从1开始)
* 参数二:具体的参数值
*/
pstmt.setInt(1, 10); // id
pstmt.setString(2, "陈六"); // name
pstmt.setInt(3, 20); // age // 传入参数之后,再进行执行
int count = pstmt.executeUpdate();
System.out.println(count+"行受影响"); } catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(pstmt, conn); // 关闭Statement的,也支持关闭PreparedStatement
// 因为 Statement是 PreparedStatement的子类
}
}
}

JDBC基础篇(MYSQL)——PreparedStatement执行DML、DQL等的更多相关文章

  1. JDBC基础篇(MYSQL)——使用statement执行DML语句(insert/update/delete)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day02_statement; import java.sql.Connection; import java.s ...

  2. [MySQL实战-Mysql基础篇]-mysql架构

    1.基本组成 下面是mysql的基本架构示意图  图一 图二 我们可以从图上看出,mysql大体分为两个部分,一个是server层,另一个是引擎层. server层中包含了连接器.查询缓存.分析器.优 ...

  3. [MySQL实战-Mysql基础篇]-mysql的日志

    参考文章: https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html https://dev.mysql.com/doc/ ...

  4. JDBC基础篇(MYSQL)——使用statement执行DQL语句(select)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day02_statement; import java.sql.Connection; import java.s ...

  5. JDBC基础篇(MYSQL)——通过JDBC连接数据库的三种方式

    package day01_jdbc; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManage ...

  6. JDBC基础篇(MYSQL)——使用CallabeStatement调用存储过程

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day04_callable; import java.sql.CallableStatement; import ...

  7. JDBC基础篇(MYSQL)——自定义JDBCUtil工具类

    package util; import java.io.File; import java.io.InputStream; import java.sql.Connection; import ja ...

  8. jdbc基础 (一) MySQL的简单使用

    前段时间学习了jdbc,正好利用这几篇文章总结一下. JDBC 可做三件事:与数据库建立连接.发送操作数据库的语句并处理结果. 而程序首先要做的就是加载数据库驱动,这里我使用的是mysql: Stri ...

  9. 重新整理 mysql 基础篇————— mysql 事务[三]

    前言 简单整理一下事务. 正文 事务有四大特性: 1.原子性(atomicity) 一个事务必须被视为一个不可分割的最小单元. 2.一致性(consistency) 数据库总是从一个一致性的状态转换到 ...

随机推荐

  1. shell编程-ssh免交互批量分发公钥脚本

    脚本基本原理 1.控制端免交互创建秘钥和公钥: 1 ssh-keygen -t rsa -f /root/.ssh/id_rsa -N "" 2.免交互发送公钥 1 sshpass ...

  2. python读取数据写入excel的四种操作

    Python对Excel的读写主要有:xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种 xlutils结合xlrd: 操作的是以xls后缀的excel,读取文件保留原格式 ...

  3. 数据分析学习1-----matplotlib

    安装:Anaconda 详细见:https://blog.csdn.net/lwplwf/article/details/79162470 使用^ThinkPad-E560:~# spyder  命令 ...

  4. 第二十六篇 -- wifi学习

    参考网址:https://blog.csdn.net/zwl1584671413/article/details/77936950 https://blog.csdn.net/Righthek/art ...

  5. Flask 之db 配置坑

    文件 .flaskenv中 DATABASE_URI = 'mysql://username:password@server/db' flask db init 报错 ImportError: No ...

  6. 打开JAVA之门:idea的安装及JAVA环境的创建

    打开JAVA之门:idea的安装及JAVA环境的创建 1.idea的下载安装 首先打开 ->->->(IntelliJ IDEA: The Capable & Ergonom ...

  7. 手写Pascal解释器(三)

    目录 一.part7 抽象语法树和具体语法树(解析树) 代码实现 二.part8 一.part7 资料来源:https://ruslanspivak.com/lsbasi-part7/ 看作者博客的标 ...

  8. 解决:无法从 Windows 应用商店下载。请检查网络连接

    今天在安装wsl的时候,装了几次一直中断,一直提示正在从Windows 应用商店下载,网络无法连接... 每次都是加载到2%就断了.网上搜了一圈,找到以下2种解决办法: 修改DNS把DNS修改为微软的 ...

  9. 洛谷P3052题解

    题面 看起来非常简单,但是细节多的一批的状压DP入门题. 我设 \(f_i\) 为 \(i\) 状态时最小分组数, \(g_i\) 为 \(i\) 状态时最后一组剩余空间. 对于每一个 \(i\) , ...

  10. 【前端 · 面试 】HTTP 总结(十)—— HTTP 缓存应用

    最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正.交流. 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火. 前言 通过前面几篇内容的学习,我们 ...