注意:其中的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. lucene Hello World

    一个lucene创建索引和查找索引的样例: 创建索引: public class Indexer { private IndexWriter indexWriter; /** * 构造器实例化inde ...

  2. Android系统编程入门系列之界面Activity响应丝滑的传统动画

    上篇文章介绍了应用程序内对用户操作响应的相关方法位置,简单的响应逻辑可以是从一个界面Activity跳转到另一个界面Activity,也可以是某些视图View的相对变化.然而不管是启动一个界面执行新界 ...

  3. Oracle19c 如何用rman duplicate 克隆一个数据库。(Backup-Based, achive log)

    Oracle19c 如何用rman duplicate 克隆一个数据库.(Backup-Based, achive log) 首先克隆有两种方法,一种是Backup-Based,一种是Active方式 ...

  4. Error:Connection activation failed: No suitable device found for this connection 问题最新解决方案

    虽然网上有很多关于这个问题的解决方案,但是我还是决定自己再次重复写一下这个解决的方案,重在更新知识和了解VMware workstation 15新功能. 在使用VMware workstation克 ...

  5. vue tab实现右定位

    呈现效果 利用v-if进行判断,登页面完全加载完毕后,显示tab页, 利用name标签,实现选择哪个tab <template> <el-tabs v-if="displa ...

  6. [考试总结]noip模拟19

    连挂3场 \(\color{green}{\huge{\text{菜}}}\) 真 . 挂分王 ... 没什么好说的了,菜就是了. \(T1\) 一波手推想到了性质 \(1\),然后因为数组原因挂成比 ...

  7. 一文说清OpenCL框架

    背景 Read the fucking official documents! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: 对不 ...

  8. list实现从大到小排序

    public static void main(String[] args) { List<Integer> list=new ArrayList<Integer>(); // ...

  9. 🔥 LeetCode 热题 HOT 100(31-40)

    75. 颜色分类 思路:将 2 往后放,0 往前放,剩余的1自然就放好了. 使用双指针:left.right 分别指向待插入的 0 和 2 的位置,初始 left 指向数组头,right 指向数组尾部 ...

  10. Windows 系统安装 git基础小白的简单操作包含基本输入命令

    首先  去官网下载git应用 https://git-scm.com/downloads  点击前往 安装的操作也比较简单,一直点击下一步 安装完成之后   在空白桌面点击是否有   Git  Gui ...